【发布时间】:2016-02-29 04:00:24
【问题描述】:
我正在使用 MULTIPROCESSING 来查找我的要求。 当它运行时,我得到一个 pid(可能是父进程!我不知道该怎么称呼它)然后与他们自己的 pid 和第一个进程的引用 id 共同处理。
现在我需要通过仅杀死第一个进程来杀死所有这些进程,这将是最好的方法。这也是 Python 的方式。
场景是这样的
ps -ef |grep py
我来了
2222 0001 first.py #0001 is os process
4323 2222 second.py
4324 2222 third.cgi
4324 2222 fourth.py
4325 2222 fifth.cgi
4326 2222 sixth.py
2223 0001 newfirst.py ############new first process from another script started
4327 2223 newsecond.cgi
4328 2223 newthird.py
4329 2223 newfourth.cgi
现在我正在杀死进程(当按下停止按钮时)
kill -6 2222 ###from terminal
然后只有 first.py 被杀死,其余的协同进程仍在运行。当然,我可以从终端杀死其他进程,但我想以一种更 Python 的方式来完成它(通过运行一个脚本,当有人按下一个 STOP 按钮时,该脚本将触发前端设计为运行 .py 文件)
现在我如何在我杀死 first.py 后立即杀死所有这些协同进程(因为我不希望它的 co 再运行)但另一个 newfirst.py 及其 co 不应该受到干扰。
我想不到这么远
import os
pid = os.getpid()
os.system('kill -9 ' + pid)
那么如何从第一个进程 id 2222 中过滤掉协同进程并杀死它们。
我也尝试过使用 psutil,但是一个接一个地传递名字来杀死并不是很有说服力。
我检查了 subprocess.popen 方法但失败了,现在我逻辑不通,请建议。
如果需要任何其他信息,请发表评论。
【问题讨论】:
-
可以使用
os.killpg(pgid, sig)信号杀死进程组。在你的情况下os.killpg(pid, 9)
标签: python python-multiprocessing kill-process