考虑进程树的SIGKILL SIGTERM的区别

涉及到stream程树时,SIGTERM和SIGKILL有什么区别?
当一个根线程接收到SIGKILL的时候,它会被干干净净地杀死,还是会把子线程当作僵尸呢?
是否有任何信号可以发送到根线程,通过不离开任何僵尸线程干净地退出?

谢谢。

如果你杀了根进程(父进程),这应该让孤儿,而不是僵尸的孩子。 孤儿是在你杀死一个进程的父进程的时候创建的,内核使得init成为孤儿的父进程。 init应该等到孤儿死后再用wait来清理它。

当一个进程(不是父进程)结束,并且其父进程没有从进程表中退出时,僵尸进程会被创建。

这听起来像你担心离开孤儿,因为根据定义,当你杀死一个僵尸父母的过程中,僵尸的孩子本身就死了。

杀死你的孤儿,使用杀死-9,这是相当于SIGKILL。

这里是一个更深入的教程,以杀死Linux上的东西: http : //riccomini.name/posts/linux/2012-09-25-kill-subprocesses-linux-bash/

你不能通过信号来控制它。 只有它的父进程可以通过调用waitpid()或设置SIGCHLD信号处理程序来控制它。 有关详细信息,请参见sigaction(2)页中的SIGCHLDSA_NOCLDWAIT

此外,子线程会发生什么情况取决于Linux内核版本。 使用2.6的POSIX线程,查杀主线程会导致其他线程干净地退出。 使用2.4 LinuxThreads,每个线程实际上是一个独立的进程, SIGKILL不会让根线程序有机会告诉别人关闭,而SIGTERM却是这样。