os.kill 不处理生成的进程
os.kill not working on spawned process
我已经编写了自己的基于 Python 的作业调度程序,它使用多处理模块来生成新作业。我正在尝试实现一项功能以使用 os.kill
终止 运行ning 进程,但它不起作用。我的(简化的)代码如下所示:
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)
os.kill
如果我 运行 它在 parent/spawning 进程的 pid 上工作,但如果我在 child/spawned 的 pid 上执行它就不起作用过程。除了 SIGTERM 之外,我还尝试了一些其他信号,例如 SIGKILL、SIGQUIT 等。None 它们都起作用了。任何帮助将不胜感激。
我通过使用 subprocess
模块创建进程并使用 os.killpg()
终止进程来解决这个问题,如下所述:
我已经编写了自己的基于 Python 的作业调度程序,它使用多处理模块来生成新作业。我正在尝试实现一项功能以使用 os.kill
终止 运行ning 进程,但它不起作用。我的(简化的)代码如下所示:
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)
os.kill
如果我 运行 它在 parent/spawning 进程的 pid 上工作,但如果我在 child/spawned 的 pid 上执行它就不起作用过程。除了 SIGTERM 之外,我还尝试了一些其他信号,例如 SIGKILL、SIGQUIT 等。None 它们都起作用了。任何帮助将不胜感激。
我通过使用 subprocess
模块创建进程并使用 os.killpg()
终止进程来解决这个问题,如下所述: