gpt4 book ai didi

python - Windows 等同于在 Python 3 中产生和杀死单独的进程组?

转载 作者:可可西里 更新时间:2023-11-01 10:14:07 26 4
gpt4 key购买 nike

我有一个 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),否则杀死进度组也会杀死网络服务器。

在 Windows 上,这些 os 函数不可用——所以如果我想在 Windows 上完成类似的事情,我该怎么做?

我正在使用 Python 3.5。

最佳答案

此答案由 eryksun 提供评论中。我把它放在这里是为了突出它,因为有人可能也参与了这个问题

他是这样说的:

You can create a new process group via ps = subprocess.Popen(cmd, creationflags=subprocess.CREATE_NEW_PROCESS_GROUP). The group ID is the process ID of the lead process. That said, it's only useful for processes in the tree that are attached to the same console (conhost.exe instance) as your process, if your process even has a console. In this case, you can send the group a Ctrl+Break via ps.send_signal(signal.CTRL_BREAK_EVENT). Processes shouldn't ignore Ctrl+Break. They should either exit gracefully or let the default handler execute, which calls ExitProcess(STATUS_CONTROL_C_EXIT)

我用这个试了一下,成功了:

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com