Linux

當 Linux 繼承孤立的殭屍程序時,Linux 是否將 SIGCHLD 發送給init

  • June 14, 2019

當 Linux 繼承孤立的殭屍程序(未被其原始父程序收割的程序)時,Linux 是否會發送SIGCHLD到(PID 1 程序)?init

是的。我測試了它。您可以在 Linux 程式碼中看到這種情況。


測試:啟動一個嵌套的 shell。從其他地方,kill -s STOP父殼。然後kill -s KILL是子外殼,然後是父外殼。

筆記:

例如,如果您在內部嘗試此gnome-terminal操作,則收割者將不是 PID 1。它將是一個子收割者,即程序systemd --user

此外,systemd使用 signalfd 處理信號。因此,當您strace -p在 systemd 程序上執行時,您不會看到收到信號。相反,您將看到 systemd 從 epoll_wait() 喚醒並對文件描述符執行 read()。

您可以確認文件描述符編號是使用ls -l /proc/<PID>/fd/<FD>. 它會說anon_inode:[signalfd]

引用自:https://unix.stackexchange.com/questions/524948