A. 【kill】kill -9 殺不死的進程處理辦法
kill -9 發送SIGKILL信號給進程將其終止,但對於以下兩種情況不適用:
1.該進程是僵屍進程(STAT z),此時進程已經釋放所有的資源,但是沒有被父進程釋放。
僵屍進程要等到父進程結束,或者重啟系統才可以被釋放。
2.進程處於「內核態」,並且在等待不可獲得的資源,處於「內核態 」的資源默認忽略所有信號,只能重啟系統解決。
進程在linux 中會處於兩種狀態,即用戶態和內核態。只有處於用戶態的進程才可以用「kill」命令將其終止
一般可以用top命令發現動態進程表,其中zombie是僵屍進程:
用ps和grep命令尋找僵屍進
# ps -A -o stat,ppid,pid,cmd
# ps -A -o stat,ppid,pid,cmd | grep -e '^[Zz]'
命令註解:
-A 參數列出所有進程
-o 自定義輸出欄位
我們設定顯示欄位為 stat(狀態), ppid(進程父id), pid(進程id),cmd(命令)這四個參數 因為狀態為 z或者Z的進程為僵屍進程。
我們使用grep抓取stat狀態為zZ進程,使用 kill -HUP ${pid} 來殺掉這個僵屍進程。
B. Linux中kill命令怎麼殺不死僵死進程,一殺死就重啟,怎麼解決(root許可權也殺不死)
僵死進程殺不死的,只有重啟 -9也沒用
C. LINUX KILL -9 殺不掉,求解決方法
一個進程對kill -9不響應我知道的有兩種情況
未接受到信號或者沒有得到分配的時間來完成自己退出所需要的步驟,因為你的CPU100%這個市可能的,多等一些時間應該會自動中止
進程處於IO等待中這時候屏蔽了信號接收自然不會對KILL作出響應,除非IO的請求得到響應,要判斷這種情況你可以看 ps aux|grep vi看看進程狀態, 如果是 D 那就是了,這個情亂會麻煩一點因為它需要請求的IO得到滿足或者被拒絕,而系統沒有給與明確的答復他就一直乾等著,根據你的描述你需要看這個打開的文件的情況,如果是nfs,那麼建議在添加掛載選項為 bg,hard,intr避免這個問題的重現,如果是本地文件你需要察看硬碟或者存儲陣列卡是否有問題但是要殺死這個進程卻需要重啟來解決
D. 如何查找和殺掉Linux中的僵屍進程
Linux 系統中,進程就是一個程序的運行實例。它可能運行在前端(比如有交互的進程),也可能運行在後端(比如無交互或自動運行的進程)。它可能是一個父進程(運行期間創建了其他進程),也可能是一個子進程(由其他進程所創建)。
在 Linux 系統中,除 PID 為 0 的第一個 init 進程(或 systemd )外,其餘進程都有父進程。進程也可以擁有自己的子進程。
你可以通過使用 pstree 命令 來查看進程的樹型結構,你可以清晰的看到各個進程的「家族樹」。
在 Linux 系統中,正常情況下,子進程死亡後其父進程會接收到通知進行一些例如釋放內存之類的清理操作。但是,如果父進程未收到通知察覺子進程死亡,那麼子進程就進入了「僵死」狀態。
這就是僵死進程產生的原因。
僵屍進程並不可怕,少量的僵屍進程對系統影響並不大。但如果系統的內存已經所剩不多或者有太多的僵屍進程在耗掉內存,問題會變得糟糕。
同樣,大部分 Linux 系統進程最大 PID 設置為 32768,如果過多僵屍進程導致其他重要任務沒有 PID 可用,那麼你的系統會發生崩潰。
特別當存在一個編碼糟糕的程序開始大量產生僵屍進程的時候,這種情況經常發生。在這種情況下,我們就需要找到並殺死僵屍進程。
在linux系統中,進程有如下幾種狀態,它們隨時可能處於以上狀態中的一種:
我們可以在命令終端中通過 top命令 來查看系統進程和它的當前狀態。
命令如下:
如上面截圖中看到的,其中共有 250 個任務(進程),其中 1 個處在 「運行中running」 狀態,248 個進程處於 「休眠sleep」 狀態,還有一個處於 「僵屍zombie」 狀態。
現在問題進入下一步,如何殺死 「僵屍」 進程?
僵屍進程對系統來說就是已經死亡的進程,那麼如何殺掉一個已經死亡的進程呢?
方法很簡單,我們只需要通過如下ps命令就可以列舉僵屍進程,得到它們的進程 ID。
ps ux 命令輸出的第 8 列顯示了進程狀態。上述命令將會列印所有處在 Z+ 狀態(表示僵屍狀態)的進程。
確認了進程 ID 後,我們可以得到它的父進程 ID:
你也可以將上述兩個命令結合在一起,直接得到僵屍進程的 PID 及其父進程的 PID:
通過以上命令都可以找到僵屍進程,然後你就可以通過 kill命 令殺掉了。
或者通過如下命令查看僵屍進程:
該命令輸出結果上你可以直接看出其父進程ID,這時候你直接使用kill命令殺掉即可。
再次運行 ps 命令或 top 命令,你可以驗證僵屍進程是否已經被殺死。
通過本文你將認識 Linux 系統中的僵屍進程以及明白了其產生的主要原因。同時,你也能學會如何查找僵屍僵屍進程並殺掉僵屍進程。
當然你也可以自己別寫腳本設置成定時運行任務自動來替你做這些工作。
E. linux伺服器root也無法殺掉的進程,提示沒有那個進程,求大神幫忙
這其實是一個與grep相關聯的進程(因為你在ps這個命令中帶了grep,在你使用grep的時候,grep也有屬於它自己的進程)真正的mysql服務的進程在你停掉mysql服務的時候就已經被全部終止了,既然被全部終止了那就是原來的服務的進程全都不存在了,既然不存在了又怎麼殺的掉呢。當你以為還沒把它徹底幹掉的時候,它早就死了不知道有多長時間了。
F. linux中遇到僵屍進程,用Kill -9、kill -18和kill -15都殺不掉,有誰知道怎麼殺嗎
子進程殺不掉,就殺父進程。
G. linux怎麼殺掉內核進程
終止一個進程或終止一個正在運行的程序,一般含液是通過 kill 、killall、pkill、xkill 等進行悔賣。比如一個程序已經死掉,但又不能退出,這時談前物就應該考慮應用這些工具。
H. linux下nginx一直殺不完是什麼原因
nginx的進程分為Master進程和worker進程,worker進程是Master派生出來的子進程,其數量始終維持在一個數量上,當缺少一個worker進程是,Master就會派生一個新的子進程。所以你殺worker進程是殺不完的。
可以這樣做:
kill `pgrep -o nginx`
解釋一下:
pgrep -o nginx 查看第一個啟動的進程號,一般就是主進程號了。
kill `pgrep -o nginx` 等價於 kill 主進程號。