os.kill没有处理衍生过程

时间:2015-02-26 14:54:38

标签: python multiprocessing kill-process

我编写了自己的基于Python的作业调度程序,它使用多处理模块来生成新作业。我尝试使用os.kill实现一项功能来终止正在运行的进程,但它无法正常工作。我的(简化)代码如下所示:

from multiprocessing import Process
import os
...
p = Process(target=self.start_job, args=(run_dir,cmd,))
p.start()
...
def start_job(self,run_dir,cmd):
        os.chdir(run_dir)
        os.system(cmd)
        print os.getpid()
        ...

我想把这个输出的pid(例如3064)和另一个python会话运行:

import os, signal    
os.kill(3064, signal.SIGTERM)
如果我在父/产生进程的pid上运行它,

os.kill可以工作,但是如果我在子/生成进程的pid上执行它,它就不起作用。除了SIGTERM,我还尝试了许多其他信号,如SIGKILL,SIGQUIT等。它们都没有工作。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

我通过使用subprocess模块创建流程组来创建流程并使用os.killpg()来终止流程来解决此问题,如下所述:https://stackoverflow.com/a/4791612/2636544