新聞中心
Linux作為一個(gè)開源的操作系統(tǒng),因?yàn)槠浒踩⒎€(wěn)定的特性,已經(jīng)受到了廣泛的應(yīng)用。和其它操作系統(tǒng)一樣,Linux也有著很多進(jìn)程運(yùn)行,這些進(jìn)程在不斷的創(chuàng)建、結(jié)束。但是有些進(jìn)程會(huì)變得不像其它正常的進(jìn)程,變得“僵尸”起來(lái),這時(shí)我們就必須清除它們了,否則它們會(huì)占用操作系統(tǒng)的資源,大大影響系統(tǒng)的穩(wěn)定性。所以,我們需要知道如何查找和清除Linux的僵尸進(jìn)程。

1、了解進(jìn)程
在查找和清除Linux的僵尸進(jìn)程之前,我們首先需要了解一些基本的進(jìn)程知識(shí)。在Linux系統(tǒng)中,每個(gè)程序都是一個(gè)進(jìn)程,每個(gè)進(jìn)程都有一個(gè)唯一的進(jìn)程標(biāo)識(shí)符(PID),每個(gè)進(jìn)程都有一個(gè)狀態(tài),狀態(tài)由wt(等待)、run(運(yùn)行)、sleep(睡眠)、stop(停止)四種狀態(tài)組成,進(jìn)程之間可以相互切換狀態(tài),也可以相互之間產(chǎn)生父子關(guān)系。另外,當(dāng)一個(gè)子進(jìn)程結(jié)束時(shí),父進(jìn)程將會(huì)收到一個(gè)SIGCHLD信號(hào),收到這個(gè)信號(hào)的父進(jìn)程需要通過(guò)wt或者wtpid函數(shù)來(lái)獲取子進(jìn)程的退出狀態(tài)。
2、什么是僵尸進(jìn)程
當(dāng)一個(gè)子進(jìn)程結(jié)束后,它的狀態(tài)信息并沒有被立即從進(jìn)程表中刪除,而是被保留在進(jìn)程表中的一個(gè)單元中,這個(gè)單元被稱為進(jìn)程描述符(Process Descriptor)。此時(shí),這個(gè)子進(jìn)程的父進(jìn)程沒有通過(guò)wt或者wtpid函數(shù)獲取子進(jìn)程的退出狀態(tài),會(huì)造成子進(jìn)程成為了僵尸進(jìn)程。僵尸進(jìn)程會(huì)占據(jù)進(jìn)程表的系統(tǒng)資源,且無(wú)法提供服務(wù),如果大量的僵尸進(jìn)程出現(xiàn),會(huì)導(dǎo)致系統(tǒng)的性能下降和穩(wěn)定性降低。
3、查找和理解僵尸進(jìn)程
在Linux系統(tǒng)中,查找僵尸進(jìn)程非常簡(jiǎn)單。我們可以通過(guò)命令行工具ps查找。直接運(yùn)行以下命令:
$ ps aux | grep ‘Z’
將會(huì)列出所有的僵尸進(jìn)程。其中,’Z’表示進(jìn)程處于僵尸狀態(tài)。在每個(gè)進(jìn)程的狀態(tài)欄中,僵尸進(jìn)程的狀態(tài)通常為’Z+’,與run狀態(tài)不同。
4、清除僵尸進(jìn)程
一旦我們找到了僵尸進(jìn)程,接下來(lái)就需要把它們清除掉。但我們不能夠直接使用kill命令,因?yàn)榻┦M(jìn)程不會(huì)響應(yīng)這個(gè)命令,它們已經(jīng)不接收信號(hào)了。
要清除僵尸進(jìn)程,我們需要使用wt或者wtpid命令。這些命令將其它進(jìn)程設(shè)置為等待狀態(tài),在子進(jìn)程結(jié)束時(shí),父進(jìn)程就可以重新獲取它的狀態(tài)。當(dāng)wtpid函數(shù)成功調(diào)用之后,僵尸進(jìn)程就會(huì)被刪除,其占用的系統(tǒng)資源也會(huì)被回收。
下面是一個(gè)示例,展示了如何使用wtpid命令來(lái)清除僵尸進(jìn)程:
#include
#include
#include
#include
#include
int mn()
{
pid_t pid;
pid=fork();
if(pid==0){
printf(“I am the child process!\n”);
exit(0);
}
else if(pid>0){
printf(“I am the parent process and my child id is %d.\n”,pid);
wtpid(pid,NULL,0);
}
else{
printf(“Error!”);
}
return 0;
}
在這個(gè)代碼中,我們創(chuàng)建了一個(gè)子進(jìn)程(pid=fork())并使其退出(exit(0));然后,我們通過(guò)wtpid命令等待子進(jìn)程結(jié)束(wtpid(pid,NULL,0))。當(dāng)子進(jìn)程結(jié)束時(shí),它的進(jìn)程描述符將從進(jìn)程表中刪除,從而清除了僵尸進(jìn)程。
:
相關(guān)問題拓展閱讀:
- ubuntu Linux怎么解決僵尸進(jìn)程?
- 如何察看僵尸進(jìn)程 zombie
ubuntu Linux怎么解決僵尸進(jìn)程?
僵尸進(jìn)程的產(chǎn)生是因?yàn)楦高M(jìn)程沒有 wait() 子進(jìn)程。所以如果我們自己寫程序的話一定要在父進(jìn)程中通過(guò) wait() 來(lái)避免僵尸進(jìn)程的產(chǎn)生。
當(dāng)系統(tǒng)中出現(xiàn)了僵尸進(jìn)程時(shí),我們是無(wú)法通過(guò) kill 命令把它清除掉的。但是我們可以殺死它的父進(jìn)程,讓它變成孤兒進(jìn)程,并進(jìn)一步被系統(tǒng)中管理孤兒進(jìn)程的進(jìn)程收養(yǎng)并清理。
Linux Ubuntu 操作系統(tǒng)top -c詳解——任務(wù)隊(duì)列信息,在之一行顯示 tasks: 69 total 進(jìn)程總數(shù)1 running 正在運(yùn)行的進(jìn)程數(shù)68 sleeping 睡眠的進(jìn)程數(shù)0 stopped 停止的進(jìn)程數(shù)0 zombie 僵死進(jìn)程數(shù) —
如何察看僵尸進(jìn)程 zombie
ps -ef | grep defunct
后面尖括號(hào)里是defunct的都是僵尸進(jìn)程
因?yàn)闆]有指出是什么系統(tǒng),我這里回答一下Linux下如何通過(guò)ps命令來(lái)查看僵尸鄭早進(jìn)程:
ps的幫助文檔中有指出,僵尸進(jìn)程會(huì)被標(biāo)記為defunct。
Processes 碰行marked are dead processes (so-called “zombies”) that remain
because their parent has not destroyed them properly. 笑叢嘩
These processes will be destroyed by init(8) if the parent process exits.
所以通過(guò)下面命令可以查找出僵尸進(jìn)程:
ps aux | grep defunct
linux這么列出僵尸進(jìn)程的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于linux這么列出僵尸進(jìn)程,如何查找和清除Linux的僵尸進(jìn)程?,ubuntu Linux怎么解決僵尸進(jìn)程?,如何察看僵尸進(jìn)程 zombie的信息別忘了在本站進(jìn)行查找喔。
成都網(wǎng)站設(shè)計(jì)制作選創(chuàng)新互聯(lián),專業(yè)網(wǎng)站建設(shè)公司。
成都創(chuàng)新互聯(lián)10余年專注成都高端網(wǎng)站建設(shè)定制開發(fā)服務(wù),為客戶提供專業(yè)的成都網(wǎng)站制作,成都網(wǎng)頁(yè)設(shè)計(jì),成都網(wǎng)站設(shè)計(jì)服務(wù);成都創(chuàng)新互聯(lián)服務(wù)內(nèi)容包含成都網(wǎng)站建設(shè),小程序開發(fā),營(yíng)銷網(wǎng)站建設(shè),網(wǎng)站改版,服務(wù)器托管租用等互聯(lián)網(wǎng)服務(wù)。
分享標(biāo)題:如何查找和清除Linux的僵尸進(jìn)程? (linux這么列出僵尸進(jìn)程)
分享地址:http://m.fisionsoft.com.cn/article/coejhie.html


咨詢
建站咨詢
