我已经编写了自己的基于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()
...我想从另一个python会话运行中获取输出(例如3064)的pid:
import os, signal
os.kill(3064, signal.SIGTERM)如果我在父进程/派生进程的pid上运行os.kill,那么它可以工作,但是如果我在子进程/派生进程的pid上执行它,它就不能工作。除了SIGTERM,我还尝试了一些其他的信号,如SIGKILL,SIGQUIT等,它们也都不起作用。任何帮助都将不胜感激。
发布于 2015-08-20 04:26:18
我解决了这个问题,方法是创建一个进程组,使用subprocess模块创建进程,并使用os.killpg()终止该进程,如下所述:https://stackoverflow.com/a/4791612/2636544
https://stackoverflow.com/questions/28745568
复制相似问题