如果 linux 进程正在等待 I/O(即它处于 SLEEP
状态)并且针对它发出 SIGKILL
信号,则在终止时( STOPPED
状态)是否会通过RUNNING
或READY
状态?
换句话说,对于处理系统中断的进程,例如由 SIGKILL
生成的中断,是否有必要通过 RUNNING
或 READY
状态?
知道在正常情况下一个进程可以处理来自内核的中断并且知道 SIGKILL
有一个相当矛盾的目的来杀死一个无响应的信号,我怀疑给予进程多少控制被杀,如果有的话。
最佳答案
信号由内核“移交给”进程,因此从进程 A 向进程 B 发送信号会使用内核。当传递 SIGKILL 时,内核不允许进程(用户模式)进行任何事件,特别是进程中断:atexit 调用,_exit。没有什么。该进程只是被系统销毁了。这涉及内核模式中的一些事件。缓冲数据丢失。 SYSV 信号量和其他内核持久内存对象留在内存中。这可能真的是一团糟。
如果内核内存中的某些东西导致挂起,您可以使用 linux 中的 sysrq 接口(interface):
http://tldp.org/HOWTO/Remote-Serial-Console-HOWTO/security-sysrq.html
--执行您可以获得的任何类似的有序关机。
这就是为什么使用 SIGKILL 绝对是最后的手段,因为你不知道你在破坏什么。而且它不会修复所有挂起。
你到底在做什么?
关于linux - SIGKILL 信号处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15766036/