新聞中心
在Linux系統(tǒng)中,進(jìn)程是一個(gè)非常重要的概念。進(jìn)程是程序的執(zhí)行實(shí)體,它在計(jì)算機(jī)系統(tǒng)中扮演著非常重要的角色,控制著計(jì)算機(jī)的各種資源。然而,有時(shí)候我們可能會(huì)遇到一些惱人的僵尸進(jìn)程。這些僵尸進(jìn)程會(huì)占用系統(tǒng)資源,導(dǎo)致系統(tǒng)運(yùn)行速度變慢。那么,如何在Linux系統(tǒng)中殺死這些僵尸進(jìn)程呢?本文將為大家詳細(xì)介紹。

創(chuàng)新互聯(lián)是一家專注于成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)與策劃設(shè)計(jì),騰沖網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十載,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:騰沖等地區(qū)。騰沖做網(wǎng)站價(jià)格咨詢:18982081108
一、了解僵尸進(jìn)程
在Linux系統(tǒng)中,僵尸進(jìn)程是指已經(jīng)停止運(yùn)行,但是卻沒(méi)有被父進(jìn)程回收的進(jìn)程。因?yàn)樗鼈円呀?jīng)停止運(yùn)行,所以它們不會(huì)再消耗CPU資源和內(nèi)存資源,但是它們占用了系統(tǒng)內(nèi)核中的一個(gè)進(jìn)程表項(xiàng)。這就是為什么它們被稱為“僵尸進(jìn)程”。
二、如何查找僵尸進(jìn)程
在Linux系統(tǒng)中,可以通過(guò)使用命令ps aux | grep ‘Z’來(lái)查找僵尸進(jìn)程。這個(gè)命令將會(huì)顯示系統(tǒng)中所有的進(jìn)程,其中’Z’表示僵尸進(jìn)程。
三、如何殺死僵尸進(jìn)程
接下來(lái),我們將介紹如何殺死僵尸進(jìn)程。在Linux系統(tǒng)中,可以通過(guò)以下兩種方法來(lái)殺死僵尸進(jìn)程:
1. 使用kill命令
在Linux系統(tǒng)中,可以使用kill命令來(lái)殺死進(jìn)程。首先通過(guò)ps aux命令查找到僵尸進(jìn)程的PID,然后使用命令kill -9 PID來(lái)殺死進(jìn)程。例如:
ps aux | grep ‘Z’
kill -9 1234
其中,1234是僵尸進(jìn)程的PID。
2. 使用pkill命令
pkill命令可以根據(jù)進(jìn)程名或者進(jìn)程PID來(lái)殺死進(jìn)程。如果你想殺死所有的僵尸進(jìn)程,可以使用以下命令:
pkill -9 -u username -x ‘[[:space:]]*Z[[:space:]]*’
其中,username指的是需要?dú)⑺肋M(jìn)程的用戶名。這條命令將會(huì)殺死這個(gè)用戶下所有的僵尸進(jìn)程。
四、如何避免僵尸進(jìn)程
我們還是需要提醒大家,要盡可能避免產(chǎn)生僵尸進(jìn)程。因?yàn)槊總€(gè)僵尸進(jìn)程占用一個(gè)進(jìn)程表項(xiàng),系統(tǒng)中僵尸進(jìn)程的數(shù)量太多,會(huì)導(dǎo)致系統(tǒng)資源的浪費(fèi)。為了避免產(chǎn)生僵尸進(jìn)程,應(yīng)該在編寫程序時(shí),使用信號(hào)機(jī)制來(lái)實(shí)現(xiàn)進(jìn)程的管理。當(dāng)子進(jìn)程退出時(shí),父進(jìn)程應(yīng)該及時(shí)回收子進(jìn)程占用的資源。
本文介紹了如何在Linux系統(tǒng)中殺死惱人的僵尸進(jìn)程。我們首先了解了僵尸進(jìn)程的概念,并且介紹了如何查找僵尸進(jìn)程。接著,我們?cè)敿?xì)介紹了兩種殺死僵尸進(jìn)程的方法。我們提醒大家要盡量避免產(chǎn)生僵尸進(jìn)程。希望這篇文章能夠幫助到大家,更好地管理Linux系統(tǒng)中的進(jìn)程。
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián)為您提供網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù)!
linux kill -9 殺不掉的進(jìn)程
kill -9 發(fā)送SIGKILL信號(hào)給進(jìn)程,將其終止,但對(duì)于以下兩種情況不適用
1.該進(jìn)程是
僵尸進(jìn)程
(STAT z),此時(shí)進(jìn)程已經(jīng)釋放所有的資源,但是沒(méi)有被父進(jìn)程釋放。僵尸進(jìn)程要等到父進(jìn)程結(jié)束,或者重啟系統(tǒng)才可以被釋悄配放。
2.進(jìn)程處于“核心態(tài)”,并且在等待不可獲得的資源,處于“核心態(tài) ”的資源默認(rèn)忽略所有信號(hào)。只能重啟系統(tǒng)。
kill 只能殺死處于用戶狀態(tài)的進(jìn)程。
下面是一個(gè)自測(cè)試?yán)樱?/p>
#include
#include
#include
#include
#include
int main(int argc ,char *argv)
{
pid_t pid;
pid = fork();
if(pid
root.0 0. pts/2 S+ 10:17 0:00 grep –color=auto
從以上信息 可以得到該進(jìn)程的進(jìn)程號(hào)是4385
此時(shí)的解決方法有兩種
《1》 cat /proc/4385/status 找到該子進(jìn)程對(duì)應(yīng)的父進(jìn)程,將其父進(jìn)程殺死
State: Z (zombie)
Tgid: 4385
Ngid: 0
Pid: 4385
PPid: 4384
執(zhí)行kill如果父進(jìn)程也殺不死,那就只能執(zhí)行重啟了
如何kill殺掉linux系統(tǒng)中的僵尸defunct進(jìn)程
Linux 中如何殺掉僵尸進(jìn)程 1) 檢查當(dāng)前僵尸進(jìn)程信息 # 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) 獲得殺僵尸進(jìn)程語(yǔ)句 # ps -ef | grep defunct | grep -v grep | awk ‘{print “kill -9 ” $2,$3}’ 執(zhí)行上面緩團(tuán)則獲得的語(yǔ)句即可, 使用信號(hào)量9, 僵尸進(jìn)程數(shù)會(huì)大大減少. 3) 過(guò)一會(huì)兒檢查當(dāng)前僵尸進(jìn)程信息 # 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 發(fā)現(xiàn)擾棚僵尸或首進(jìn)程數(shù)減少了一些, 但還有不少啊. 4) 再次獲得殺僵尸進(jìn)程語(yǔ)句 # ps -ef | grep defunct | grep -v grep | awk ‘{print “kill -18 ” $3}’ 執(zhí)行上面獲得的語(yǔ)句即可, 這次使用信
在 Unix系統(tǒng)管理中,當(dāng)用ps命令觀察進(jìn)程的執(zhí)行狀態(tài)時(shí),經(jīng)??吹侥承┻M(jìn)程的狀態(tài)欄為defunct,這就是所謂的“僵尸”進(jìn)程。“僵尸”進(jìn)程是一個(gè)早已 死亡的進(jìn)程,但在進(jìn)程表(processs table)中仍占了一個(gè)位置(slot)。由于進(jìn)程表的容量是有限的,所以,defunct進(jìn)程不僅占用系統(tǒng)的內(nèi)存資源,影響系統(tǒng)的性能,而且如果其數(shù) 目太多,還會(huì)導(dǎo)致系統(tǒng)癱瘓。
我們知道,每個(gè)Unix進(jìn)程在進(jìn)程表里都有一個(gè)進(jìn)入點(diǎn)(entry),核心程序執(zhí)行該進(jìn)程時(shí)使用到的一切信息都存儲(chǔ)在進(jìn)入點(diǎn)。當(dāng)用ps命令察看系統(tǒng)中的進(jìn)程信息時(shí),看到的就是進(jìn)程表中的相關(guān)數(shù)據(jù)。當(dāng)以fork()系統(tǒng)調(diào)用建立一個(gè)新的進(jìn)程后,核心進(jìn)程就會(huì)在進(jìn)程表中給這個(gè)新進(jìn)程分配一個(gè)進(jìn)入點(diǎn),然后將相關(guān)信息存儲(chǔ)在該進(jìn)入點(diǎn)所對(duì)應(yīng)的進(jìn)程表內(nèi)。這些信息中有一項(xiàng)是其父進(jìn)程的識(shí)別碼。當(dāng)這個(gè)進(jìn)程走完了自己的生命周期后,它會(huì)執(zhí)行exit()系統(tǒng)調(diào)用,此時(shí)原來(lái)進(jìn) 程表中的數(shù)據(jù)虛爛會(huì)被該進(jìn)程的退出碼(exit code)、執(zhí)行時(shí)所用的CPU時(shí)間等數(shù)據(jù)所取代,這些數(shù)據(jù)會(huì)一直保留到系統(tǒng)將它傳遞給它的父進(jìn)程為止。由此可見(jiàn),defunct進(jìn)程的出現(xiàn)時(shí)間是在子毀虧進(jìn) 程終止后,但是父進(jìn)程尚未讀取這些數(shù)據(jù)之前。
defunct進(jìn)程是不能直接kill -9殺掉的,否則就不叫僵尸進(jìn)程了。
找到該defunct僵尸進(jìn)程的父進(jìn)程,將該進(jìn)程的父進(jìn)程殺掉,則此defunct進(jìn)程將自動(dòng)消失。
找到defunct僵尸進(jìn)程的父進(jìn)程?:ps -ef | grep defunct_process_pid。
kill 找到的這個(gè)僵尸進(jìn)程的父進(jìn)程。
在fork()/execve()過(guò)程中,假設(shè)子進(jìn)程結(jié)束時(shí)父進(jìn)程仍存在,而父進(jìn)程fork()之前既沒(méi)安裝SIGCHLD信號(hào)處理函數(shù)調(diào)用waitpid()等待子進(jìn)程結(jié)束,又沒(méi)有顯式忽略該信號(hào),則子進(jìn)程成為僵尸進(jìn)程,無(wú)法正常結(jié)束,此時(shí)即使是root身份kill -9也不能殺死僵尸進(jìn)程。補(bǔ)救辦法是殺死僵尸進(jìn)程的父進(jìn)程(僵尸進(jìn)程的父進(jìn)程必然存在),僵尸進(jìn)程成為”孤兒進(jìn)程”,過(guò)繼給差余漏1號(hào)進(jìn)程init,init始終會(huì)負(fù)責(zé)清理僵尸進(jìn)程。
在Linux系統(tǒng)中查看進(jìn)程及殺死僵尸進(jìn)程的方法
ps
命令
ps
命令就是最根本相應(yīng)情況下也是相當(dāng)強(qiáng)大地進(jìn)程查看命令.運(yùn)用該命令可以確定有哪些進(jìn)程正在運(yùn)行和運(yùn)行地狀態(tài)、
進(jìn)程
是否結(jié)束、進(jìn)程有沒(méi)有僵死、哪些進(jìn)程占用了過(guò)多地資源等等.總之大部分信息均為可以通過(guò)執(zhí)行該命令得到地.
ps
命令及其參數(shù)
ps
命令最經(jīng)常使用地還是用于監(jiān)控后臺(tái)進(jìn)程地工作情況,因?yàn)楹笈_(tái)進(jìn)程是不和屏幕鍵盤這些標(biāo)準(zhǔn)輸入/輸出設(shè)
備進(jìn)行通信地,所以如果需要檢測(cè)其情況,便可以運(yùn)用
ps
命令了.
該命令語(yǔ)法格式如下:
ps
-e
顯示所有進(jìn)程,環(huán)境變量
-f
全格式
-h
不顯示標(biāo)題
-l
長(zhǎng)格式
-w
寬輸出
a
顯示終端上地所有進(jìn)程,包括其他用戶地進(jìn)程
r
只顯示正在運(yùn)行地進(jìn)程
x
顯示沒(méi)有控制終端地進(jìn)程
O
k1
k2
>
根據(jù)
SHORT
KEYS、k1、k2
中快捷鍵指定地多級(jí)排序順序顯示進(jìn)程列表.
對(duì)于
ps
地不同格式都存在著默認(rèn)地順序指定.這些默認(rèn)順序可以被用戶地指定所覆蓋.在這里面“+”字符是可選地,“-”
字符是倒轉(zhuǎn)指定鍵地方向.
pids
只列出進(jìn)程標(biāo)識(shí)符,之間運(yùn)用逗號(hào)分隔.該進(jìn)程列表必須在命令行參數(shù)地最后一個(gè)選項(xiàng)后面緊接著給出,中間不能插入
空格.比如:ps
-f1,4,5.
以下介紹長(zhǎng)命令行選項(xiàng),這些選項(xiàng)都運(yùn)用“–”開(kāi)頭:
–sort
X
key
key
>
從
SORT
KEYS
段中選一個(gè)多字母鍵.“+”字符是可選地,因?yàn)槟J(rèn)地方向就是按
數(shù)字升序或者詞典順序.比如:
ps
-jax
-sort=uid,-ppid,+pid.
–help
顯示幫助信息.
–version
顯示該命令地版本信息.
在前面地選項(xiàng)說(shuō)明中提到了排序鍵,接下來(lái)對(duì)排序鍵作進(jìn)一步說(shuō)明.需要注意地是排序中運(yùn)用地值是
ps
運(yùn)用地內(nèi)部值,并非
僅用于某些輸出格式地偽值.排序鍵列表見(jiàn)表
4-3.
排序鍵列表
c
cmd
可執(zhí)行地簡(jiǎn)單名稱
C
cmdline
完整命令行
f
flags
信搭 長(zhǎng)模式標(biāo)志
g
pgrp
進(jìn)程地組
ID
G
tpgid
控制
tty
進(jìn)程組
ID
j
梁坦掘cutime
累計(jì)用戶時(shí)間
J
cstime
累計(jì)系統(tǒng)時(shí)間
k
utime
用戶時(shí)間
K
stime
系統(tǒng)時(shí)間
m
min_flt
次要頁(yè)錯(cuò)
查找Zombie進(jìn)程
首先,當(dāng)桌面程序卡死的時(shí)候,你可以嘗試進(jìn)入其他tty終端。切換方式:ctrl
+
alt
+
,7是桌面終端
其次,你可以使用top命令查看當(dāng)前是否有Zombie進(jìn)程
從上圖可以看到僵尸進(jìn)程數(shù),num
zombie,num大于0,則代表系統(tǒng)存在僵尸進(jìn)程
最后,利用ps命令查找Zombie進(jìn)程
復(fù)制代碼
代碼如下:
ps
-A
-ostat,ppid,pid,cmd
|
grep
-e
‘橡核^’
示例
:
殺死Zombie進(jìn)程
直接kill
-9
Zombiepid是沒(méi)有作用的,原因是:Zombie表示進(jìn)程已經(jīng)退出,想要清理這樣的進(jìn)程,需要清除其父進(jìn)程或者等很長(zhǎng)時(shí)間后內(nèi)核將其清除
復(fù)制代碼
代碼如下:
kill
-HUP
ppid
后記
不知道為什么我注銷之后重新登錄還有這個(gè)僵尸進(jìn)程,懷疑是否是LightDM的bug,不過(guò)Ubuntu12.04
desktop
display
manager就是LightDM,所以kill
關(guān)于linux 殺僵尸進(jìn)程的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
香港云服務(wù)器機(jī)房,創(chuàng)新互聯(lián)(www.cdcxhl.com)專業(yè)云服務(wù)器廠商,回大陸優(yōu)化帶寬,安全/穩(wěn)定/低延遲.創(chuàng)新互聯(lián)助力企業(yè)出海業(yè)務(wù),提供一站式解決方案。香港服務(wù)器-免備案低延遲-雙向CN2+BGP極速互訪!
新聞標(biāo)題:極簡(jiǎn)教程:如何在Linux系統(tǒng)中殺死惱人的僵尸進(jìn)程?(linux殺僵尸進(jìn)程)
文章轉(zhuǎn)載:http://m.5511xx.com/article/cdoepgo.html


咨詢
建站咨詢
