㈠ 如何kill殺掉linux系統中的僵屍defunct進程
Linux 中如何殺掉僵屍進程 1) 檢查當前僵屍進程信息 # ps -ef | grep defunct | grep -v grep | wc -l 175 # top | head -2 top - 15:05:54 up 97 days, 23:49, 4 users, load average: 0.66, 0.45, 0.39 Tasks: 829 total, 1 running, 479 sleeping, 174 stopped, 175 zombie # ps -ef | grep defunct | grep -v grep 2) 獲得殺僵屍進程語句 # ps -ef | grep defunct | grep -v grep | awk '{print "kill -9 " $2,$3}' 執行上面獲得的語句即可, 使用信號量9, 僵屍進程數會大大減少. 3) 過一會兒檢查當前僵屍進程信息 # ps -ef | grep defunct | grep -v grep | wc -l 125 # top | head -2 top - 15:29:26 up 98 days, 12 min, 7 users, load average: 0.27, 0.54, 0.56 Tasks: 632 total, 1 running, 381 sleeping, 125 stopped, 125 zombie 發現僵屍進程數減少了一些, 但還有不少啊. 4) 再次獲得殺僵屍進程語句 # ps -ef | grep defunct | grep -v grep | awk '{print "kill -18 " $3}' 執行上面獲得的語句即可, 這次使用信
㈡ Linux中如何殺掉僵屍進程
1、使用top命令就可以查看到僵屍進程。
說明:不是查不出僵屍進程,是因為我重啟了系統,沒有僵屍進程。
3、殺死僵屍進程
#kill -9 pid號
㈢ ubuntu Linux怎麼解決僵屍進程
inux 允許進程查詢內核以獲得其父進程的 PID,或者其任何子進程的執行狀態。例如,進程可以創建一個子進程來執行特定的任務,然後調用諸如 wait() 這樣的一些庫函數檢查子進程是否終止。如果子進程已經終止,那麼,它的終止代號將告訴父進程這個任務是否已成功地完成。
為了遵循這些設計原則,不允許 Linux 內核在進程一終止後就丟棄包含在進程描述符欄位中的數據。只有父進程發出了與被終止的進程相關的 wait() 類系統調用之後,才允許這樣做。這就是引入僵死狀態的原因:盡管從技術上來說進程已死,但必須保存它的描述符,直到父進程得到通知。
如果一個進程已經終止,但是它的父進程尚未調用 wait() 或 waitpid() 對它進行清理,這時的進程狀態稱為僵死狀態,處於僵死狀態的進程稱為僵屍進程(zombie process)。任何進程在剛終止時都是僵屍進程,正常情況下,僵屍進程都立刻被父進程清理了
㈣ ubuntu Linux怎麼解決僵屍進程
如何查看linux系統上的僵屍進程,如何統計有多少僵屍進程?
#ps -ef | grep defunct
或者查找狀態為Z的進程,Z就是代表zombie process,僵屍進程的意思。
另外使用top命令查看時有一欄為S,如果狀態為Z說明它就是僵屍進程。
Tasks: 95 total, 1 running, 94 sleeping, 0 stopped, 0 zombie
top命令中也統計了僵屍進程。或者使用下面的命令:
ps -ef | grep defunct | grep -v grep | wc -l
如何殺死僵屍進程呢?
一般僵屍進程很難直接kill掉,不過您可以kill僵屍爸爸。父進程死後,僵屍進程成為」孤兒進程」,過繼給1號進程init,init始終會負責清理僵屍進程.它產生的所有僵屍進程也跟著消失。
ps -e -o ppid,stat | grep Z | cut -d」 」 -f2 | xargs kill -9
或
kill -HUP `ps -A -ostat,ppid | grep -e 』^[Zz]『 | awk 』{print $2}』`
當然您可以自己編寫更好的shell腳本,
㈤ linux的ps命令
linux命令ps詳解:
使用許可權:所有使用者(用戶)
使用方式:ps [options] [--help]
說明:顯示瞬間行程 (process) 的動態
參數:ps的參數非常多, 在此僅列出幾個常用的參數並大略介紹含義
-A 列出所有的進程
-w 顯示加寬可以顯示較多的資訊
-au 顯示較詳細的資訊
-aux 顯示所有包含其他使用者的行程
常用參數:
-A 顯示所有進程(等價於-e)(utility)
-a 顯示一個終端的所有進程,除了會話引線
-N 忽略選擇。
-d 顯示所有進程,但省略所有的會話引線(utility)
-x 顯示沒有控制終端的進程,同時顯示各個命令的具體路徑。dx不可合用(utility)
-p pid 進程使用cpu的時間
-u uid or username 選擇有效的用戶id或者是用戶名
-g gid or groupname 顯示組的所有進程。
U username 顯示該用戶下的所有進程,且顯示各個命令的詳細路徑
-f 全部列出,通常和其他選項聯用。如:ps -fa or ps -fx and so on
-l 長格式(有F,wchan,C 等欄位)
-j 作業格式
-o 用戶自定義格式
v 以虛擬存儲器格式顯示
s 以信號格式顯示
-m 顯示所有的線程
-H 顯示進程的層次(和其它的命令合用
e 命令之後顯示環境
h 不顯示第一行
最常用的方法是ps -aux,然後再ps命令常用用法(方便查看系統進程)
1)ps a 顯示現行終端機下的所有程序,包括其他用戶的程序
2)ps -A 顯示所有進程
3)ps c 列出程序時,顯示每個程序真正的指令名稱,而不包含路徑,參數或常駐服務的標示
4)ps -e 此參數的效果和指定"A"參數相同
5)ps e 列出程序時,顯示每個程序所使用的環境變數
6)ps f 用ASCII字元顯示樹狀結構,表達程序間的相互關系
7)ps -H 顯示樹狀結構,表示程序間的相互關系
8)ps -N 顯示所有的程序,除了執行ps指令終機下的程序之外
9)ps s 採用程序信號的格式顯示程序狀況
10)ps S 列出程序時,包括已中斷的子程序資料
11)ps -t<終端機編號> 指定終端機編號,並列出屬於該終端機的程序的狀況
12)ps u 以用戶為主的格式來顯示程序狀況
13)ps x 顯示所有程序,不以終端機來區分
最常用的方法是ps -aux,然後再利用一個管道符號導向到grep去查找特定的進程,然後再對特定的進程進行操作。利用一個管道符號導向到grep去查找特定的進程,然後再對特定的進程進行操作。
㈥ 求助linux下ps命令顯示含義.
分類: 電腦/網路 >> 操作系統/系統故障
問題描述:
linux下ps命令後的毀森status項
顯示Rs代表什纖搏畝么含義,
R表示run
s代表sleep
那麼R與s合起來是什麼?
以及大寫S與小寫s有什麼區別.
經常看到Ss的狀態。
解銀叢析:
剛剛裝了RHEL5β2版本
發現這個版本的ps和top裡面是有Ss的
man了一下 ps和top
解釋如下
PROCESS STATE CODES
Here are the different values that the s, stat and state output specifiers
(header "STAT" or "S") will display to describe the state of a process.
D Uninterruptible sleep (usually IO)
R Running or runnable (on run queue)
S Interruptible sleep (waiting for an event to plete)
T Stopped, either by a job control signal or because it is being traced.
W paging (not valid since the 2.6.xx kernel)
X dead (should never be seen)
Z Defunct ("zombie") process, terminated but not reaped by its parent.
For BSD formats and when the stat keyword is used, additional characters may
be displayed:
< high-priority (not nice to other users)
N low-priority (nice to other users)
L has pages locked into memory (for real-time and custom IO)
s is a session leader
l is multi-threaded (using CLONE_THREAD, like NPTL pthreads do)
+ is in the foreground process group
㈦ Linux下面ps -o是什麼意思
ps命令的-o參數,抄是說明用戶自定義格式。比如-o pid= -o cmd= 就是讓ps命令分別顯示進程的pid和相應的命令和詳細參數,這樣ps命令就不會像默認的那樣顯示很多其他內容了,而只顯示你關心的部分。如下圖所示:
㈧ Linux裡面什麼是僵屍進程
僵屍進程是當子進程比父進程先結束,而父進程又沒有回收子進程,釋放手鄭行子進程佔用的資源,此時子進程都將成為一個僵屍進程。如果父進程先退出,子進程被init接管,子叢孫進程退出後init會收回其佔用的相關資源。
我們都知道進程的工作原畢嘩理。我們啟動一個程序,開始我們的任務,然後等任務結束了,我們就停止這個進程。進程停止後,該進程就會從進程表中移除。
你可以通過System-Monitor查看當前進程。
In UNIX System terminology, a process that has terminated,but whose parent
has not yet waited for it, is called a
zombie.在Unix系統中,一個進程結束了,但是它的父進程沒有等待它,那麼它將變成一個僵屍進程。但是如果該進程的父進程已經先結束了,那麼該進程就不會變僵屍進程,因為每個進程結束的時候,系統都會掃描當前系統中所運行的所有進程,看有沒有哪個進程是剛剛結束的這個進程的子進程,如果是的話,就由init來接管他,成為他的父進程。
怎麼查看僵屍進程?
利用命令ps,可以看到有父進程ID為1的進程是孤兒進程;s狀態為z的是僵屍進程。
注意:孤兒進程是尚未終止但已停止的進程,但其父進程已經終止,由init收養;而僵屍進程則是已終止的進程,其父進程不一定終止。
㈨ 如何察看僵屍進程 zombie
因為沒有指出是什麼系統,我這里回答一下Linux下如何通過ps命令來查看僵屍進程:
ps的幫助文檔中有指出,僵屍進程會被標記為defunct。
Processesmarked<defunct>aredeadprocesses(so-called"zombies")thatremain
.
(8)iftheparentprocessexits.
所以通過下面命令可以查找出僵屍進程:
psaux|grepdefunct
㈩ 如何找到並終止 Linux 系統中的僵屍進程
在了解僵屍進程之前,讓我們來復習一下什麼是 Linux 進程。
簡而言之, 進程 [1] 是一個程序的運行實例。它可能運行在前端(比如有交互的進程),也可能運行在後端(比如無交互或自動運行的進程)。它可能是一個父進程(運行期間創建了其他進程),也可能是一個子進程(由其他進程所創建)。
在 Linux 系統中,除 PID 為 0 的第一個 init 進程(或 systemd )外,其餘進程都有父進程。進程也可以擁有自己的子進程。
不相信?可以試試在終端中使用 pstree 命令查看進程的樹型結構,你能看到系統各個進程的「家族樹」。
子進程死亡後,它的父進程會接收到通知去執行一些清理操作,如釋放內存之類。然而,若父進程並未察覺到子進程死亡,子進程就會進入到「<ruby style="box-sizing: border-box;">僵屍<rt style="box-sizing: border-box;">zombie</rt></ruby>」狀態。從父進程角度看,子進程仍然存在,即使子進程實際上已經死亡。這就是「<ruby style="box-sizing: border-box;">僵屍進程<rt style="box-sizing: border-box;">zombie process</rt></ruby>」(也被稱為「<ruby style="box-sizing: border-box;">已消失進程<rt style="box-sizing: border-box;">defunct process</rt></ruby>」)是如何產生並存在於系統中的。
這里有一個來自 Turnoff.us [2] 的關於僵屍進程的非常有趣的看法:
Image credit: Turnoff.us
重點要說的是,僵屍進程並沒有像它的名稱那樣看起來可怕。
但如果系統的內存已經所剩不多或者有太多的僵屍進程在吃掉內存,問題會變得糟糕。同樣,大部分 Linux 系統進程最大 PID 設置為 32768,如果過多僵屍進程導致其他重要任務沒有 PID 可用,你的系統會發生崩潰。
這是真實可能發生的,它有一定的概率,特別當存在一個編碼糟糕的程序開始大量產生僵屍進程的時候。
在這種情況下,找到並殺死僵屍進程是一個明智的做法。
Linux 系統中的進程可能處於如下狀態中的一種:
那如何查看進程和它的當前狀態呢?一個簡單的方法是在終端中使用 top 命令 [3]。
Top command show processes and their status
正如你在上面截圖中看到的,截圖中共有 250 個任務(進程),其中 1 個處在 「<ruby style="box-sizing: border-box;">運行中<rt style="box-sizing: border-box;">running</rt></ruby>」 狀態,248 個進程處於 「<ruby style="box-sizing: border-box;">休眠<rt style="box-sizing: border-box;">sleep</rt></ruby>」 狀態,還有一個處於 「<ruby style="box-sizing: border-box;">僵屍<rt style="box-sizing: border-box;">zombie</rt></ruby>」 狀態。
現在問題進入下一步,如何殺死 「僵屍」 進程?
僵屍進程已經死了,要如何才能殺死一個已經死亡的進程呢?
在僵屍電影中,你可以射擊僵屍的頭部或燒掉它們,但在這里是行不通的。你可以一把火燒了系統來殺死僵屍進程,但這並不是一個可行的方案。
一些人建議發送 SIGCHLD 給父進程,但這個信號很可能會被忽略。還有一個方法是殺死父進程來殺死僵屍進程,這聽起來很野蠻,但它卻是唯一能確保殺死僵屍進程的方法。
首先,通過在終端中 使用 ps 命令 [4] 我們列舉僵屍進程,得到它們的進程 ID:
<pre class="prettyprint linenums" style="box-sizing: border-box; overflow: hidden; font: 400 12px / 20px "courier new"; display: block; padding: 10px 15px; margin: 20px 0px; color: rgb(248, 248, 212); word-break: break-all; overflow-wrap: break-word; background: rgb(39, 40, 34); border: none; border-radius: 4px; box-shadow: rgb(57, 56, 46) 40px 0px 0px inset, rgb(70, 71, 65) 41px 0px 0px inset; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;">
</pre>
ps ux 命令輸出的第 8 列顯示了進程狀態。上述命令只會列印所有處在 Z+ 狀態(表示僵屍狀態)的進程。
確認了進程 ID 後,我們可以得到它的父進程 ID:
<pre class="prettyprint linenums" style="box-sizing: border-box; overflow: hidden; font: 400 12px / 20px "courier new"; display: block; padding: 10px 15px; margin: 20px 0px; color: rgb(248, 248, 212); word-break: break-all; overflow-wrap: break-word; background: rgb(39, 40, 34); border: none; border-radius: 4px; box-shadow: rgb(57, 56, 46) 40px 0px 0px inset, rgb(70, 71, 65) 41px 0px 0px inset; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;">
</pre>
你也可以將上述兩個命令結合在一起,直接得到僵屍進程的 PID 及其父進程的 PID:
<pre class="prettyprint linenums" style="box-sizing: border-box; overflow: hidden; font: 400 12px / 20px "courier new"; display: block; padding: 10px 15px; margin: 20px 0px; color: rgb(248, 248, 212); word-break: break-all; overflow-wrap: break-word; background: rgb(39, 40, 34); border: none; border-radius: 4px; box-shadow: rgb(57, 56, 46) 40px 0px 0px inset, rgb(70, 71, 65) 41px 0px 0px inset; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;">
</pre>
現在你得到了父進程 ID,使用命令行和得到的 ID 號 終於可以殺死進程了 [5]:
<pre class="prettyprint linenums" style="box-sizing: border-box; overflow: hidden; font: 400 12px / 20px "courier new"; display: block; padding: 10px 15px; margin: 20px 0px; color: rgb(248, 248, 212); word-break: break-all; overflow-wrap: break-word; background: rgb(39, 40, 34); border: none; border-radius: 4px; box-shadow: rgb(57, 56, 46) 40px 0px 0px inset, rgb(70, 71, 65) 41px 0px 0px inset; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;">
</pre>
Killing parent process
再次運行 ps 命令或 top 命令,你可以驗證僵屍進程是否已經被殺死。
恭喜!現在你知道怎麼清理僵屍進程了。
via: https://itsfoss.com/kill-zombie-process-linux/