Linux當 Linux 繼承孤立的殭屍程序時,Linux 是否將
當 Linux 繼承孤立的殭屍程序時,Linux 是否將 SIGCHLD
發送給init
?
當 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]
。