6

如果一个 linux 进程正在等待 I/O(即它处于SLEEP状态)并且SIGKILL针对它发出了一个信号,那么在终止(STOPPED状态)时它会通过RUNNING还是READY状态?

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

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

4

2 回答 2

8

信号由内核“传递”给进程,因此将信号从 processA 发送到 processB 使用内核。传递 SIGKILL 时,内核不允许进程(用户模式)进行任何活动,特别是进程中断:atexit 调用,_exit。没有。该进程被系统简单地销毁。这涉及内核模式中的一些活动。缓冲数据丢失。SYSV 信号量和其他内核持久内存对象留在内存中。这可能是一个真正的混乱。

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

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

--执行任何你能得到的有序关机的外观。

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

你到底在做什么?

于 2013-04-02T14:32:30.020 回答
1

除了吉姆麦克纳马拉的回答:

SIGKILL (kill -9) 无法处理。

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

于 2013-04-02T15:01:06.337 回答