杀死父进程不会杀死子进程

int*_*ore 6 process kill

我有个问题。学习进程管理我观察到一个奇怪的行为,在 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
Run Code Online (Sandbox Code Playgroud)

之后,我尝试杀死(使用 SIGKILL 信号)父进程,即 bash,但此操作不会杀死 dd 进程:

[root@server2 ~]# kill -9 1741
Killed
[user@server2 ~]#
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

你有什么想法吗?

小智 9

默认情况下,杀死父进程不会杀死子进程。

我建议您寻找有关如何使用进程组(负 PID)杀死父进程和子进程的其他问题。

可以在进程后代中找到有关如何详细执行此操作的好答案