Process
殺死父程序不會殺死子程序
我有個問題。研究程序管理我在 CentOS 7 上觀察到一個奇怪的行為。我知道殺死一個父程序,子程序也被殺死。但不是在以下情況下。我執行了命令 dd,例如:
[root@server2 ~]# dd if=/dev/zero of=/dev/null & [1] 1756 [root@server2 ~]# ps fax | grep -B2 dd 1737 pts/2 S 0:00 \_ su - 1741 pts/2 S 0:00 \_ -bash 1756 pts/2 R 1:18 \_ dd if=/dev/zero of=/dev/null
之後,我嘗試殺死(使用 SIGKILL 信號)父程序,即 bash,但此操作不會殺死 dd 程序:
[root@server2 ~]# kill -9 1741 Killed [user@server2 ~]#
shell 終止,但正如您在頂部命令輸出中看到的那樣,dd 程序仍在工作:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1756 root 20 0 107948 612 512 R 99.9 0.1 10:06.98 dd
請問您對此有什麼想法嗎?
預設情況下,殺死父程序不會殺死子程序。
我建議您尋找有關如何使用程序組(負 PID)殺死父母和孩子的其他問題。
請根據自己的需要進行調整,尤其是在 kill 命令上:
function kill_recurse() { cpids=`pgrep -P $1|xargs` for cpid in $cpids; do kill_recurse $cpid done echo "killing $1" kill -9 $1 }
範例用法是:
kill_recurse <my_parent_pid>