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

2024-09-28 05:28:20 发布

您现在位置:Python中文网/ 问答频道 /正文

b.py公司

import subprocess
f = subprocess.Popen(['python', 'a.py'])
time.sleep(3000)

a.py公司

import time
time.sleep(1000)

运行pythonb.py,按CTRL+C,两个进程都将终止。你知道吗

但是,将信号SIGINT发送到父进程b.py,kill-2 xxxx,但子进程a.py仍然存在。你知道吗


Tags: pyimporttime信号进程公司sleepsubprocess
1条回答
网友
1楼 · 发布于 2024-09-28 05:28:20

终端上的Ctrl-C通常将SIGINT发送到前台进程组中的所有进程。父进程和子进程都在此进程组中。你知道吗

有关更详细的解释,请参见示例The TTY demystified或Kirk McKusick在Process Groups and Sessions上的更技术的版本

如果您只是终止父进程,则子进程是无父进程,因此将被重新租入PID 1(init)。您也可以在ps的输出中看到这一点。因为您的子进程从未收到信号,所以它只是继续运行。你知道吗

相关问题 更多 >

    热门问题