假设我有进程 A 产生进程 B,产生进程 C。在什么情况下杀死 A 会杀死整个链(或我猜是树),什么时候不会?我有时发现它确实如此,有时 B 以 ppid 1 结束而 C 未受影响。
这种行为是否因特定的 Linux 内核版本而异?
的kill()系统调用和kill外壳命令可用于杀死任一进程或进程组。无论哪种方式,永远都没有“级联”。
当kill()系统调用或killshell 命令被赋予一个正整数时,这表示一个进程。信号被发送到那个进程而不是其他进程。
当kill()系统调用被赋予一个负整数或killshell 命令被赋予以%(例如%1或%2)开头的作业标识符时,信号会同时发送到进程组的所有成员。进程组是一种作业控制功能。在交互式 shell 使用中,每个 shell 管道(如sed s/foo/bar/ | cat -n | gzip)由 1 个或多个进程组成,这些进程都属于同一进程组。
(对于系统调用,有一些额外的情况:-1发送给每个进程,0发送给自己)。
这并不意味着当一个进程终止时,另一个进程也不会因为其他原因而终止。例如:
内核根本不对此类“额外”后果负责,它们取决于所涉及的软件的行为方式。