Ubuntu系统中Python如何按进程名杀死整个多进程程序
原因说明
pkill -9 test.py不生效的核心原因是:pkill默认只匹配进程的命令名(comm字段),而Python脚本运行时,进程的实际命令名是python/python3,test.py只是传给解释器的启动参数,不在默认匹配范围内。
对于多进程程序,不需要逐个查询PID手动查杀,以下方法可以一次性终止整个程序的所有关联进程:
可用操作方法
全命令匹配查杀(操作最简单)
给pkill加-f参数后,会匹配进程启动时的完整命令字符串,就能精准命中运行test.py的Python进程:# 先执行预览命令,列出所有将被匹配的进程,避免误杀 pgrep -af test.py # 确认列表内都是需要终止的进程后,执行强制终止 pkill -9 -f test.py注意:如果当前有其他进程的命令行包含
test.py字段(比如正用编辑器打开test.py编辑、其他路径下有同名test.py在运行),会被一并终止,一定要先跑pgrep确认匹配范围。按进程组查杀(精准度最高,无错杀风险)
多进程程序启动后,所有派生的子进程默认和主进程属于同一个进程组,只要向进程组发送终止信号,就能一次性清理所有关联进程,不会影响其他同名程序:# 第一步:查询test.py的主进程PID,例如返回结果为12345 pgrep -f test.py | head -n 1 # 第二步:终止整个进程组,注意PID前面必须加负号 kill -9 -12345前台启动程序的退出方式
如果是在当前终端前台启动的test.py,不需要输入命令:- 优先按
Ctrl+C发送终止信号,给程序留出释放端口、清理临时文件的时间,优雅退出 - 若程序完全卡住无响应,再按
Ctrl+\发送退出信号强制终止
非必要不要上来就用-9(SIGKILL)信号,这个信号会直接杀死进程,不给程序留任何处理善后的机会,容易出现端口占用、临时文件残留的问题。
- 优先按
内容的提问来源于stack exchange,提问作者marlon
相关产品推荐
相关产品推荐

