子进程对SIGINT信号的反应不同

时间:2015-03-13 07:55:48

标签: python linux process subprocess

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仍然存在。

1 个答案:

答案 0 :(得分:1)

终端上的

Ctrl-C通常会将SIGINT发送到前台流程组中的所有流程。您的父进程和子进程都在此进程组中。

有关更详细的说明,请参阅The TTY demystified或Kirk McKusick在Process Groups and Sessions

的更多技术版本。

如果您刚刚终止父进程,则子进程无父进程,从而获得PID 1(init)的资源。您也可以在ps的输出中看到这一点。由于您的子进程从未收到信号,因此它只是继续运行。