gpt4 book ai didi

如果其中一个进程被 SIGSTOP 停止,则子进程在杀死父进程时死亡

转载 作者:IT王子 更新时间:2023-10-28 23:54:26 27 4
gpt4 key购买 nike

我的测试代码是

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

int main() {
int c = fork();
if (c == 0) while(1);
c = fork();
if (c == 0) while(1);
c = fork();
if (c == 0) while(1);
c = fork();
if (c == 0) while(1);
while(1);
}

所以我有一个 parent 和 4 个 child 。当我杀死 parent 时, children 在 init 作为 parent 的情况下工作正常。但是,如果我停止(使用 SIGSTOP)其中一个 child 然后杀死 parent , child 也会被杀死。为什么会这样?

最佳答案

显然,如果进程组中的一个进程停止,所有进程都会收到 SIGHUP 信号,然后在进程组领导者终止时发出 SIGCONT 信号。 SIGHUP 的默认处理程序终止进程。这是预期的行为,如记录在例如

http://www.win.tue.nl/~aeb/linux/lk/lk-10.html

来自上面的链接:

If termination of a process causes a process group to become orphaned, and some member is stopped, then all are sent first SIGHUP and then SIGCONT.

The idea is that perhaps the parent of the process group leader is a job control shell. (In the same session but a different process group.) As long as this parent is alive, it can handle the stopping and starting of members in the process group. When it dies, there may be nobody to continue stopped processes. Therefore, these stopped processes are sent SIGHUP, so that they die unless they catch or ignore it, and then SIGCONT to continue them.

编辑:

顺便说一句,strace 是一个很好的工具,可以用来查明这些事情的真相。如果您将 strace 附加到其中一个子进程,您将看到仅当其中一个子进程在父进程(即进程组领导)死亡时停止时才会发送 SIGHUP。

您需要使用例如更改 SIGHUP 的处理程序sigaction(2) 如果您希望子进程存活。

关于如果其中一个进程被 SIGSTOP 停止,则子进程在杀死父进程时死亡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4354885/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com