如果linux进程正在等待I/O (即,它处于SLEEP状态),并且针对它发出SIGKILL信号,那么在终止(STOPPED状态)时,它将通过RUNNING状态还是READY状态?
换句话说,对于处理由SIGKILL生成的系统中断的进程,是否需要传递RUNNING或READY状态?
我知道在正常情况下进程可以处理来自内核的中断,并且知道SIGKILL终止无响应信号的目的是相当矛盾的,因此我怀疑是否对被终止的进程进行了多少控制。
发布于 2013-04-02 22:32:30
信号是由内核“传递”给进程的,因此从processA向processB发送信号会使用内核。当SIGKILL被交付时,内核不允许进程(用户模式)的任何活动,特别是进程停机: atexit调用,_exit。没什么。这个过程被系统简单地破坏了。这涉及到内核模式下的一些活动。缓存的数据会丢失。SYSV信号量和其他内核持久内存对象留在内存中。它可以是一个真正的混乱。
如果内核内存中的某些东西导致挂起,您可以使用linux中的sysrq接口:
http://tldp.org/HOWTO/Remote-Serial-Console-HOWTO/security-sysrq.html
--执行您能得到的任何表面上的有序关闭。
这就是为什么使用SIGKILL绝对是最后的手段,因为您无法知道您正在破坏什么。而且它不会修复所有的挂起。
你到底在做什么?
发布于 2013-04-02 23:01:06
https://stackoverflow.com/questions/15766036
复制相似问题