今天我就給大家講講Linux的僵尸進(jìn)程。什么是僵尸流程?僵尸進(jìn)程是指進(jìn)程已經(jīng)退出但其父進(jìn)程沒有恢復(fù)內(nèi)核資源的進(jìn)程,即內(nèi)核空之間的PCB(進(jìn)程控制塊)沒有釋放,raksmart服務(wù)器。
下面是僵尸進(jìn)程的示例程序。在這個(gè)程序中,父進(jìn)程讓子進(jìn)程退出而不處理,然后父進(jìn)程調(diào)用系統(tǒng)函數(shù)列出當(dāng)前前臺(tái)進(jìn)程信息。代碼如下:
#包括
#包括
#包括
int main()
{
int pid
if((pid = fork()) == -1)
perror(" fork err ");
else if(!pid){
退出(0);
}
睡眠(1);
系統(tǒng)(“PS”);
返回0;
}
運(yùn)行結(jié)果如下:
紅盒子的過(guò)程是死狀態(tài)。
如何清除僵尸進(jìn)程:
1.重寫父進(jìn)程,并在子進(jìn)程死后為其收集主體。方法是接管SIGCHLD信號(hào)。子進(jìn)程死亡后,會(huì)向父進(jìn)程發(fā)送一個(gè)SIGCHLD信號(hào)。收到這個(gè)信號(hào)后,父進(jìn)程執(zhí)行waitpid()函數(shù)為子進(jìn)程收集尸體。
2.殺死父進(jìn)程。父進(jìn)程死亡后,僵尸進(jìn)程成為“孤兒進(jìn)程”,繼承給1號(hào)進(jìn)程init,init將一直負(fù)責(zé)清理僵尸進(jìn)程。它產(chǎn)生的所有僵尸進(jìn)程也隨之消失。
Wait()和waitpid()
wait():
調(diào)用wait()函數(shù)的父進(jìn)程將停止等待該進(jìn)程的任何子進(jìn)程完成,然后回收該子進(jìn)程的內(nèi)核進(jìn)程資源。
waitpid():
waitpid()函數(shù)可用于等待指定子進(jìn)程(具有指定pid的子進(jìn)程)完成。該函數(shù)聲明如下:
您可以通過(guò)/proc//映射文件查看進(jìn)程資源。
1.《僵死進(jìn)程 Linux僵尸進(jìn)程清除方法》援引自互聯(lián)網(wǎng),旨在傳遞更多網(wǎng)絡(luò)信息知識(shí),僅代表作者本人觀點(diǎn),與本網(wǎng)站無(wú)關(guān),侵刪請(qǐng)聯(lián)系頁(yè)腳下方聯(lián)系方式。
2.《僵死進(jìn)程 Linux僵尸進(jìn)程清除方法》僅供讀者參考,本網(wǎng)站未對(duì)該內(nèi)容進(jìn)行證實(shí),對(duì)其原創(chuàng)性、真實(shí)性、完整性、及時(shí)性不作任何保證。
3.文章轉(zhuǎn)載時(shí)請(qǐng)保留本站內(nèi)容來(lái)源地址,http://f99ss.com/yule/1603689.html