@
wwqgtxx 感谢指教
https://en.wikipedia.org/wiki/Signal_(IPC)#SIGKILL> In contrast to SIGTERM and SIGINT, this signal cannot be caught or ignored
学习了。稍微程序试了下,的确不行。平时做 gracefully shutdown 特意只屏蔽了 SIGHUP, SIGINT, SIGTERM 和 SIGQUIT 就想留着 SIGKILL 给脸着地用的。没想到其实也不被允许这样做。
因此我第一种猜想显然是脑补错误的。
关于 “自行了断”,应该是我表述问题。我记得&理解是这样的。通常情况下,所有信号是异步的,我们发送 sigkill, kernel 把它丢进了 q,然后对应进程结束回收资源。通常情况下,它会在若干时间片里面就处理完毕。但是例外也是有的。普通的用户进程是可以随便打断的,但是涉及到 kernel 的调用有时候不行。如果有些 kernel 级别的调用在很短周期内反复使用,或者一直调用不成功,抽不出时间片处理信号,目标的回收就会被延时。
以前有时候遇到有些 python 用户,挂了 100 多 G 数据在内存,意外死了。执行 kill 不成功,但是有其它程序在跑又不太好直接重启。于是就等上两天,它自己抽出空就能消失。