如何在不杀死“主进程”的情况下终止子进程?
我有一个只能使用signal.CTRL_C_EVENT
终止的子进程。执行标准的os.kill(my_pid, signal.CTRL_C_EVENT)
会终止该进程,但也会导致我的主进程死亡,尽管它拥有不同的pid。
我的最终目标是从单元测试中创建子进程,因此我需要该单元测试在通过所有测试后返回sys.exit(0)
。
child.py
from time
while True:
print "I am alive"
time.sleep(0.5)
parent.py
import os
import signal
import subprocess
import time
p = subprocess.Popen(["child.py"], shell=True)
time.sleep(5)
os.kill(p.pid, signal.CTRL_C_EVENT)
print("This line doesn't print because the main thread dies")
::: 更新 :::
我试图在Windows上运行这个程序。移除shell=True
似乎没有影响。我在parent.py中看到了一个KeyboardInterrupt错误。
Traceback (most recent call last)
File "parent.py", line 23, in <module>
KeyboardInterrupt
以下所有方法都会导致相同的行为
os.kill
- 对
psutil.Process(os.getpid()).children()
发送信号 subprocess.call(['taskkill', ...
shell=True
选项,这个选项在某种程度上非常依赖于平台,可能会产生奇怪的结果。你可能需要更改调用popen
的方式,以给出Python解释器可执行文件的完整路径,然后是child.py
文件的完整路径。 - Z4-tier:::update:::
。 - J'e