将SIGKILL发送到Linux中的Zombie Process时会发生什么?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了将SIGKILL发送到Linux中的Zombie Process时会发生什么?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1705字,纯文字阅读大概需要3分钟。
内容图文
![将SIGKILL发送到Linux中的Zombie Process时会发生什么?](/upload/InfoBanner/zyjiaocheng/959/c7d9e2b13cba4dedbf9dc9a3e433fbf8.jpg)
在Linux中,当子进程终止并且它的父进程尚未等待它时,它就变成了一个僵尸进程.子的退出代码存储在pid描述符中.
如果向孩子发送SIGKILL,则不应该有任何效果.
这是否意味着退出代码不会被SIGKILL修改,或者是否会修改退出代码以指示子项因为收到SIGKILL而退出?
解决方法:
要回答这个问题,您必须了解如何将信号发送到进程以及进程如何存在于内核中.
每个进程在内核中表示为task_struct(该定义位于sched.h头文件中,并从here开始).该结构包含有关该过程的信息;比如pid.重要信息在line 1566中,其中存储了相关信号.仅当信号发送到进程时才设置此项.
死进程或僵尸进程仍然有task_struct.结构保持不变,直到父进程(自然或采用)在收到SIGCHLD以获得其子进程后调用wait().发送信号时,设置signal_struct.在这种情况下,信号是否是可捕获的无关紧要.
每次进程运行时都会评估信号.或者确切地说,在流程运行之前.然后该过程处于TASK_RUNNING状态.内核运行schedule()例程,该例程根据其调度算法确定下一个正在运行的进程.假设这个过程是下一个运行过程.然后评估signal_struct的值,是否存在待处理的等待信号.如果手动定义信号处理程序(通过signal()或sigaction()),则执行注册的功能,否则执行signal’s default action.默认操作取决于发送的信号.
例如,SIGSTOP信号的默认处理程序将当前进程的状态更改为TASK_STOPPED,然后运行schedule()以选择要运行的新进程.请注意,SIGSTOP不可捕获(如SIGKILL),因此无法注册手动信号处理程序.如果发出无法捕获的信号,将始终执行默认操作.
对于你的问题:
调度程序永远不会将失效或死循序确定为再次处于TASK_RUNNING状态.因此,内核永远不会运行相应信号的信号处理程序(默认或定义),无论哪个信号.因此exit_signal将永远不会再次设置.通过在进程的task_struct中设置signal_struct,信号被“删除”到进程,但是不会发生任何其他事情,因为进程将永远不会再次运行.没有代码可以运行,流程的剩余部分就是流程结构.
然后,如果父进程通过wait()收回其子进程,则它接收的退出代码是进程“最初”死亡时的进程代码.是否有信号等待处理并不重要.
内容总结
以上是互联网集市为您收集整理的将SIGKILL发送到Linux中的Zombie Process时会发生什么?全部内容,希望文章能够帮你解决将SIGKILL发送到Linux中的Zombie Process时会发生什么?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。