news 2026/7/8 5:32:13

【kill】在容器中使用 nohup 启动 Python 训练脚本后,如何正确停止进程?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【kill】在容器中使用 nohup 启动 Python 训练脚本后,如何正确停止进程?

​ 在服务器或 Docker 容器中跑深度学习训练时,nohup几乎是标配操作:(可以参考之前写的文章【在容器中运行长时间 Python 任务:SSH 断开也不怕】

nohuppython scripts/frozen_backbone_train.py>logs/frozen_finetune.log2>&1&

​ 但问题也随之而来:这个后台跑起来的 Python 进程,到底该怎么安全、彻底地停掉?

​ 本文结合一次PyTorch 训练 + DataLoader 多进程的真实排查过程,完整记录正确的 kill 思路。

一、先找到真实在跑的进程

​ 第一步永远不是kill -9,而是确认进程结构

psaux|grephomo_with_vit_frozen.py

​ 可能会看到类似输出:

root1652... python frozen_backbone_train.py root2424... python frozen_backbone_train.py root2425... python frozen_backbone_train.py root2426... python frozen_backbone_train.py...

​ 这时候很多人会懵:为什么同一个脚本会有一堆 Python 进程?

二、为什么会有多个 python 进程?

​ 这是PyTorch 非常典型的行为

2.1 主进程(训练主逻辑)

root1652... python frozen_backbone_train.py
  • 负责:模型 forward / backward / optimizer.step
  • 通常:
    • 运行时间很长
    • CPU / GPU 占用明显
  • 这是你真正要 kill 的进程

2.2 子进程(DataLoader workers)

root2424~2431... python frozen_backbone_train.py

​ 这些通常是:

DataLoader(..., num_workers > 0)
  • 拉起的数据加载子进程,特征非常明显:
    • 一次性出现一串
    • PID 连号
    • CPU 占用相近
    • 内存结构几乎一样
  • 结论:多进程 ≠ 多个训练任务,而是一个训练任务 + 多个数据加载 worker

三、正确的 kill 姿势(推荐)

3.1 方式一:只 kill 主进程(最干净)

kill1652
  • 大多数情况下:主进程退出,所有 DataLoader 子进程会被自动回收

  • 如果进程没有立刻退出

    kill-91652

3.2 方式二:直接按脚本名全部清场

  • 当你确认这个脚本已经不需要了,可以直接:

    pkill-9 -f frozen_backbone_train.py
  • -f:匹配完整命令行

  • 会同时 kill 主进程 + 所有子进程

  • 注意:如果你同时跑了多个同名脚本,这一招会“一锅端”。

四、如何确认真的 kill 干净了?

4.1 再查一次进程

psaux|grepfrozen_backbone_train.py

如果只剩下:

grep--color=auto frozen_backbone_train.py

说明进程已经全部退出

4.2 如果使用 GPU,确认显存释放

nvidia-smi
  • 没有 python 占用显存 → OK
  • 有残留 → 继续kill -9 <pid>

五、小结

  • nohup启动的 Python 进程 ≠ 只有一个进程
  • PyTorch 的DataLoader(num_workers > 0)会产生多个子进程
  • 正确做法是:
    • 优先 kill 主进程
    • 或使用pkill -f一次性清理
  • 养成记录 PID 的习惯,可以极大降低维护成本
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/5 13:57:25

linux 内核核心初始化

start_kernel()是 Linux 内核最核心的初始化函数&#xff08;init/main.c&#xff09;&#xff0c;几乎所有内核核心子系统的初始化都从这里触发&#xff0c;函数内按依赖顺序调用一系列初始化函数&#xff0c;整体可拆分为8 个关键阶段&#xff0c;从核心到外围逐步展开&#…

作者头像 李华
网站建设 2026/7/1 9:36:35

java+vue基于springboot宠物成长监管系统的设计与实现_hv51v658

目录 项目背景技术架构核心功能创新点应用价值 开发技术源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; 项目背景 宠物成长监管系统结合Java与Vue技术栈&#xff0c;基于SpringBoot框架开发&#xff0c;旨在为宠物主人提供科学化的成长…

作者头像 李华
网站建设 2026/7/8 4:33:26

ServerBox(Linux服务器工具箱)

erverBox是一款基于Flutter开发的免费开源Linux服务器工具箱。它遵循GPL 3.0开源协议&#xff0c;支持iOS、Android、macOS、Windows和Linux等多平台操作系统&#xff0c;提供多语言支持&#xff0c;包括中文。 软件功能 状态监控&#xff1a;通过直观的状态图表&#xff0c;实…

作者头像 李华
网站建设 2026/7/6 20:08:46

论文双险通关!虎贲等考 AI 降重去 AIGC:让学术原创性无可挑剔

&#xff08;一&#xff09;研究目的 在数字技术推动下&#xff0c;音乐产业正从实体时代全面迈向数字化、流媒体化新阶段&#xff0c;流媒体平台崛起、版权体系重构、用户消费习惯转变等新变化&#xff0c;让产业的收入结构和发展模式发生了显著改变。本研究旨在结合统计学与…

作者头像 李华