当涉及到过程树时,SIGTERM和SIGKILL有什么区别?
当根线程收到SIGKILL时,它会被干净地杀死,还是将其子线程保留为僵尸?
是否可以通过不留下任何僵尸线程将任何信号发送到根线程以干净退出?

谢谢。

最佳答案

如果您杀死根进程(父进程),这应该使 child 成为孤儿,而不是僵尸 child 。当您杀死进程的父级时,将创建孤儿,而内核将init设为父级。 init应该等待直到孤儿死亡,然后使用wait清理它。

当进程(而不是其父进程)结束并且其父进程不占据进程表的退出状态时,将创建僵尸子级。

在我看来,您担心离开孤儿是因为,按照定义,当您杀死一个僵尸父进程时,僵尸 child 本身就会死亡。

要杀死您的孤儿,请使用kill -9,它等效于SIGKILL。

这是在Linux上杀死内容的更深入的教程:
http://riccomini.name/posts/linux/2012-09-25-kill-subprocesses-linux-bash/

关于linux - 考虑过程树的SIGKILL SIGTERM之间的差异,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5399355/

10-09 09:34