b.py
import subprocess
f = subprocess.Popen(['python', 'a.py'])
time.sleep(3000)
a.py
import time
time.sleep(1000)
运行python b.py,按CTRL + C,两个进程都将终止。
但是将信号SIGINT发送到父进程b.py,kill -2 xxxx,但子进程a.py仍然存在。
答案 0 :(得分:1)
Ctrl-C
通常会将SIGINT
发送到前台流程组中的所有流程。您的父进程和子进程都在此进程组中。
有关更详细的说明,请参阅The TTY demystified或Kirk McKusick在Process Groups and Sessions
的更多技术版本。如果您刚刚终止父进程,则子进程无父进程,从而获得PID 1(init)的资源。您也可以在ps
的输出中看到这一点。由于您的子进程从未收到信号,因此它只是继续运行。