You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何同时终止bash脚本及其启动的Python程序?

如何一次性终止bash脚本及其启动的所有Python子进程

快速解决方法:杀死整个进程组

你遇到的问题是,默认kill $PID只终止了bash父进程,而它启动的Python子进程会变成孤儿进程被系统接管,继续运行。要一次性杀掉父进程和所有子进程,直接针对进程组发送信号即可:

kill -- -$PID

或者明确指定终止信号(推荐先使用默认的TERM信号,给进程清理资源的机会):

kill -TERM -$PID

如果进程无法正常终止,再强制杀死:

kill -9 -$PID

原理:nohup bash tmp.sh &启动的bash进程是进程组的组长,进程组ID等于该bash进程的PID。-$PID表示向整个进程组发送信号,会覆盖该组内的所有进程(包括bash和它启动的Python程序)。


脚本优化:让bash退出时自动清理子进程

如果希望后续启动的任务,在执行普通kill $PID时也能自动终止子进程,可以修改你的tmp.sh脚本,添加信号陷阱:

修改后的tmp.sh:

# 当脚本退出时,杀死所有以当前bash进程为父进程的子进程
trap 'pkill -P $$' EXIT
time python3 while.py

原理:trap命令会捕获bash脚本的退出事件(包括收到TERM信号时的退出),执行pkill -P $$命令杀死所有父进程ID为当前bash进程($$表示当前进程PID)的子进程,也就是那个Python程序。这样以后执行kill $PID就能同时终止bash和Python进程了。


验证效果

执行终止命令后,用以下命令确认Python进程已被清理:

ps aux | grep python3 | grep -v grep

如果没有输出,说明进程已被成功终止。

内容的提问来源于stack exchange,提问作者Shaodong Li

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 23:00:17