linux - SIGKILL 信号处理

标签 linux unix posix sigkill posix-api

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

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

知道在正常情况下一个进程可以处理来自内核的中断并且知道 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/

相关文章:

c - 为什么 errno,当 POSIX 函数通过返回 -1 或 NULL 指示错误条件时

linux - 是否可以使用此系统检查登录失败,或者我需要使用expect?

linux - 如何使用 cut 显示文件的第一个字段

linux - grep 查找 OR 条件下的 2 个单词并打印下 10 行

c - 将 STDERR 从服务重定向到系统日志

c - Posix 调用 'read' 不读取整个文件

c++ - 在 64 位 Linux 上编译 32 位 Qt - fatal error : gnu/lib-names-32. h

linux - 如何捕获 glob 运算符(operator)的权限被拒绝错误?

linux - shell 必须解析 ls -Al 输出并获取最后一个字段(文件或目录名)任何解决方案

c++ - 如何在 Linux 中监视子进程状态