SIGKILL信号处理

时间:2013-04-02 13:57:45

标签: linux unix posix sigkill posix-api

如果linux进程正在等待I / O(即它处于SLEEP状态)并且针对它发出SIGKILL信号,则在终止(STOPPED状态时)将进行通过RUNNINGREADY州?

换句话说,对于处理系统中断的进程,例如由SIGKILL生成的进程,是否需要通过RUNNINGREADY状态?

知道在正常情况下一个进程可以处理来自内核的中断并且知道SIGKILL具有杀死无响应信号的相当矛盾的目的,我怀疑对该进程的被控制有多少控制,如果有的话。

2 个答案:

答案 0 :(得分:7)

内核将信号“切换”到进程,因此从processA向processB发送信号使用内核。当交付SIGKILL时,内核不允许进程(用户模式)进行任何活动,特别是进程纲要:atexit调用,_exit。没有。该过程简单地被系统破坏。这涉及内核模式中的一些活动。缓冲数据丢失。 SYSV信号量和其他内核持久性内存对象留在内存中。这真是一团糟。

如果内核内存中的某些内容导致挂起,请使用linux中的sysrq接口:

http://tldp.org/HOWTO/Remote-Serial-Console-HOWTO/security-sysrq.html

- 执行您可以获得的任何有序关闭的外观。

这就是为什么使用SIGKILL是绝对的最后手段,因为你无法知道你在打破什么。并且它不会修复所有挂起。

你到底在做什么?

答案 1 :(得分:1)

除了jim mcnamara的回答:

无法处理SIGKILL(kill -9)。

请参阅https://stackoverflow.com/a/2541618/1456519上的答案了解更多信息。