调试时自己写了一些捕捉 signal 的代码,程序开起来以后发现关不掉了,把对应的 shell 窗口关了无法结束进程,在 htop 里手动发送 SIGKILL 或其他信号也无反应,这种情况应该怎么处理?
调试时自己写了一些捕捉 signal 的代码,程序开起来以后发现关不掉了,把对应的 shell 窗口关了无法结束进程,在 htop 里手动发送 SIGKILL 或其他信号也无反应,这种情况应该怎么处理?
|
1
sudo kill -KILL
|
|
GuuJiangApr 20, 2022 via iPhone
2
SIGTERM
|
|
feather12315Apr 20, 2022 via Android
3
只有一种办法:写个 module 自己处理掉
|
|
cubecubeApr 20, 2022
4
-9 强杀呗。
处理程序不对,可能有非 deamon 线程 |
|
FullBridgeRectApr 20, 2022
5
sigkill 搞不掉大概是什么系统调用卡住了
|
|
lance86Apr 20, 2022
6
题外话:SIGKILL 在程序里没法被捕获的。用 SIGTERM 吧,可以被监听到。
至于为啥 SIGKILL 都没反应,这个没有思路。 |
|
bootvueApr 20, 2022
7
薅电源
|
|
weyouApr 20, 2022 via Android
8
连 SIGKILL 都搞不定只能重启了。一般是阻塞在了不可中断的内核调用里了,比如某些 I/O 调用。
|
|
nightwitchApr 20, 2022
9
信号是要程序从内核态返回用户态的时候被处理的。
sigkill 都杀不掉的话说明卡死在内核态了 建议直接重启 |
|
ClericPyApr 20, 2022
10
1. htop 里 K 9 干不掉, 多数情况是权限不够, 在命令行手敲命令看看是不是报了权限不足, 必要时候 sudo
2. 还有一种情况是进程有守护, 所以要看一下进程 ID 有没有变化 3. SIGKILL 程序是不能捕获的, 常识性问题 |