linux中进程杀不死解决办法
如圖,多次在kill -9 此進程后依然存在
先說解決辦法,輸入過濾命令ps -ef|grep xxx(此處寫要過濾的進程名字),例如
之后kill掉對應的進程號,如圖
問題解決。
如果有多個子進程可以先過濾再一起殺死:ps -ef | awk '/spark/ && !/awk/{print $2}' | xargs kill -9
這里我思考了一下發生問題的原因,kill掉3575沒有提示進程不存在,3565應該是父進程,而子進程在被殺死之后因為依賴的父進程存活,又立馬重新運行,所以即便多次成功殺死3575子進程依然存活。
簡單講就是進程已經成為僵死進程,當它的父進程將它回收或將它的父進程kill掉即可在ps輸出看不到了
僵尸進程不能被殺死,因為它們已經死亡,只等待它們的父進程回收它們。
而如果殺死不存在進程會有提示信息,這也說明之前的僵尸進程是被殺死又重新運行了的:
當然進程殺不死也有其他可能:
1.因為jps這個命令是jdk提供的,準確率不高,而ps -ef是linux自帶的,前者查詢不準確導致的。
2.進程正處在內核狀態中,Linux進程運行時分內核和用戶兩種狀態,當進程進入內核狀態后,會屏蔽所有信號,包括SIGKILL,所以這個時候kill -9也變得無效了。
當SIGKILL被發送給一個程序時,它使程序立即終止。與SIGTERM和SIGINT相比,這個信號不能被捕獲或忽略,同時接收這個信號的進程在收到這個信號時不能執行任何清理。
即使SIGKILL被發送給它,一個正在不可中斷睡眠的進程也可能不會終止(并且釋放它的資源)。這是少數幾個一個UNIX系統可能需要被重新啟動來解決臨時軟件問題的例子中的一個。
總結
以上是生活随笔為你收集整理的linux中进程杀不死解决办法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 物流单号保存在TXT文档,教你一键导入批
- 下一篇: 有关调音台的专业英文词汇