Linux 在继承孤儿僵尸进程时会向 init 发送 SIGCHLD 吗?

Linux 在继承孤儿僵尸进程时会向 init 发送 SIGCHLD 吗?

当Linux继承孤儿僵尸进程(未被其原始父进程回收的进程)时,它是否会发送SIGCHLD到(PID 1进程)?init

答案1

是的。我测试过了。你可以看到这种情况发生在哪里在Linux代码中


测试:启动嵌套 shell。来自其他地方的kill -s STOP父 shell。然后是kill -s KILL子 shell,然后是父 shell。

笔记:

例如,如果您在内部尝试此操作gnome-terminal,收割机将不是 PID 1。它将是一个子收割机,即进程systemd --user

另外,systemd使用 signalfd 处理信号。因此,当您strace -p在 systemd 进程上运行时,您将不会看到收到信号。相反,您将看到 systemd 从 epoll_wait() 唤醒并对文件描述符执行 read()。

您可以使用 确认文件描述符编号是 signalfd ls -l /proc/<PID>/fd/<FD>。它会说anon_inode:[signalfd]

相关内容