kill和kill -9,兩個命令在linux中都有殺死進程的效果,,然而兩命令的執(zhí)行過程卻大有不同,,在程序中如果用錯了,可能會造成莫名其妙的現(xiàn)象,。
執(zhí)行kill(不加 -* 默認kill -15)命令,,系統(tǒng)會發(fā)送一個SIGTERM信號給對應(yīng)的程序。當(dāng)程序接收到該signal信號后,,將會發(fā)生以下事情: 程序立刻停止 當(dāng)程序釋放相應(yīng)資源后再停止 程序可能仍然繼續(xù)運行 大部分程序接收到SIGTERM信號后,,會先釋放自己的資源,然后再停止,。但是也有程序可能接收信號后,,做一些其他的事情(如果程序正在等待IO,可能就不會立馬做出響應(yīng),,我在使用wkhtmltopdf轉(zhuǎn)pdf的項目中遇到這現(xiàn)象),,也就是說,SIGTERM多半是會被阻塞的,。 然而kill -9命令,,系統(tǒng)給對應(yīng)程序發(fā)送的信號是SIGKILL,即exit,。exit信號不會被系統(tǒng)阻塞,,所以kill -9能順利殺掉進程。 小結(jié):在使用 kill -9 前,,應(yīng)該先使用 kill -15,,給目標(biāo)進程一個清理善后工作的機會。如果沒有,,可能會留下一些不完整的文件或狀態(tài),,從而影響服務(wù)的再次啟動。 殺掉tomcai ps -ef|grep tomcat|grep -v|awk -F '{print $2}'|xargs kill -9 等同于 kill -9 `ps -ef | grep 'python wkr_main.py' | awk '{print $2}'` xargs接收管道前面?zhèn)鬟^來的字符 |
|