我有一个Web服务器,需要管理一个单独的多进程子进程(即启动它并杀死它)。

对于基于Unix的系统,以下工作正常:

# save the pid as `pid`
ps = subprocess.Popen(cmd, preexec_fn=os.setsid)

# elsewhere:
os.killpg(os.getpgid(pid), signal.SIGTERM)

我这样做(使用os.setsid),因为否则杀死进度组也将杀死Web服务器。

在Windows上,这些os函数不可用-因此,如果我想在Windows上完成类似的操作,该怎么做?

我正在使用Python 3.5。

最佳答案

此答案由eryksun在注释中提供。我将其放在此处以突出显示,因为有人可能也参与了这个问题

他的话是这样的:



我尝试过这个并成功:

process = Popen(args=shlex.split(command), shell=shell, cwd=cwd, stdout=PIPE, stderr=PIPE,creationflags=subprocess.CREATE_NEW_PROCESS_GROUP)
/*...*/
process .send_signal(signal.CTRL_BREAK_EVENT)
process .kill()

关于python - Windows是否等效于在Python 3中生成和杀死单独的进程组?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47016723/

10-12 22:50