我们在hadoop集群中有kafka机器
停止kafka进程的脚本执行以下操作
杀死PID
但是我们注意到,停止kafka的脚本并没有真正杀死进程
因此,我们通过以下方式(手动)将其杀死:
杀死-9 PID
所以-在这种情况下,进程坚持要被-9杀死(而不是杀死pid)
脚本中的示例
function kafkaKill {
local localPID=$1
kill $localPID || return 1
for ((i=0; i<MAX_WAIT_TIME; i++)); do
kafkaIsRunning $localPID
if [ $? -eq 0 ]; then return 0; fi
sleep 1
done
kill -s KILL $localPID || return 1
for ((i=0; i<MAX_WAIT_TIME; i++)); do
kafkaIsRunning $localPID
if [ $? -eq 0 ]; then return 0; fi
sleep 1
done
return 1
}
默认情况下,向进程发送标准kill会发送(根据维基百科)SIGTERM。这样做是通知该进程应关闭。这是处理流程的好方法,它像这样:
发送强制流程退出的SIGTERM没有任何作用。它可以完全忽略它,也可以根据需要运行。
Kill -9发送SIGKILL。您无权为SIGKILL注册处理程序,这意味着将调用默认处理程序(我相信内核空间-有人在这里纠正我)。在这种情况下,您没有机会执行上述操作,您的进程会立即从可运行的进程列表中删除,并且其内存和所有内容都将被销毁。如果您正在写文件的一半,这显然会引起问题。
一些进程在关闭之前会采用多个SIGTERM信号-您是否尝试过?该过程可能还会记录您可以发送哪些信号以将其彻底关闭。
处于不良状态的进程即使已注册,也可能没有机会进入信号处理程序。在某些点上无法接收到信号(您正在中断中,或者已经在处理另一个信号,还有一些我目前无法确定)。如果您的进程由于某种原因而卡在了其中(无论出于何种原因),无论发送多少次,SIGTERM处理程序都将永远不会运行。唯一的解决方案是SIGKILL,但是我什至看到了忽略该信号的情况,在这种情况下,必须重新启动系统。
要回答您的问题-在哪种情况下,忽略杀死并坚持用-9杀死:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句