当前位置: 首页 > news >正文

为什么 VS Code 停止调试后 Python 进程还在?

1 问题现象

在使用 VS Code 调试 PyTorch 项目时,即使点击了“停止”按钮,通过 htopps aux 仍能看到大量类似如下的进程持续运行:

/home/shi/miniconda3/envs/inpainting/bin/python ... torch/_inductor/compile_worker/__main__.py --workers=32 ...

这些进程占用 CPU 和内存,且不会自动退出,即使重启 VS Code 也无法清除。如下图所示
|800

2 根本原因

这些并不是普通的子进程,而是 PyTorch Inductor 的编译工作进程(Compile Workers)。当你使用 torch.compile()(或某些高版本 PyTorch 自动启用编译优化)时,PyTorch 会启动多个后台进程用于并行编译模型以提升性能。

然而,VS Code 的调试器(debugpy)在停止会话时,只会终止主 Python 进程,不会清理这些由 PyTorch 启动的独立编译进程。它们变成“孤儿进程”,继续在后台运行。

3 快速清理方法

使用以下命令可一次性清除所有残留进程:

ps aux | grep "inpainting/bin/python" | grep -v grep | awk '{print $2}' | xargs kill -9

4 我的解决方案

4.1 方法:优雅管理子进程

始终用 if __name__ == '__main__': 保护主逻辑

# your_script.py
import torchdef main():model = torch.compile(...)  # 会触发 compile_worker# 你的训练/推理逻辑if __name__ == '__main__':main()

作用:防止子进程重复导入并再次启动新进程。

5 VS Code 用户技巧

  • 在 VS Code 终端里运行程序后,不要只点 Stop,而是按 Ctrl+C 两次(发送 SIGINT),有时比点击 Stop 更可靠。
  • 使用 --multiprocessing-start-method=spawn(在 Linux 上默认是 fork,容易出问题)
http://www.jsqmd.com/news/30352/

相关文章:

  • Jenkins更换IP后,访问速度慢的问题解决.251103
  • Modbus协议地址模型详解学习笔记
  • 首次博客
  • CF2161 Pinely Round 5 (Div. 1 + Div. 2) 游记(VP)
  • 以太网交换技术
  • 2025-11-03 NOIP 模拟赛1 赛后总结
  • flex:1 什么意思
  • 以销定采是什么?为什么越来越重要?
  • 2025年优质少儿编程机构揭秘:提供国家等级测评+优质的课程体系+一站式赛考服务!
  • Modbus协议功能码详解学习笔记
  • 议论文素材分类整理
  • 使用WSL挂载U盘及SD卡外设的方案
  • ESP32 I2C通信
  • day06-自动出题工作流
  • 推送docker镜像到github
  • 软件工程学习日志2025.11.3
  • day05-智能换脸-12306出行建议-提取音频工作流
  • x./AC自动机
  • P1029 [NOIP 2001 普及组] 最大公约数和最小公倍数问题
  • SQL Server 并发控制 第四篇:Snapshot Isolation (SI) 和 Read Committed Snapshot Isolation (RCSI)
  • godot 描边插件
  • 怎么在现有App里融入AI对话能力
  • DFS 序 O(1) 求 LCA
  • @pytest.fixture和setup/teardown
  • 矿山通信如何实现全域一体化?迈威为煤矿装上了“智慧神经网络”
  • Java异常处理实战精要:构建稳定应用的基石
  • €$P2025
  • CSP2025 补题
  • 哈希学习总结
  • 142.环形链表 II