- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个 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/
我是一名优秀的程序员,十分优秀!