殭屍進程zombie

一、什麼是殭屍進程?

 

子進程結束後,內核會向父進程發送SIGCHLD信號。若父進程沒有顯式忽略該信號或調用相應的信號處理函數(調用wait, waitpid等函數)回收殭屍進程,則該子進程將保持爲zombie狀態。

 

一個子進程已經終止,但其父進程尚未對其進行處理,這樣的子進程稱爲殭屍進程(zombie)

殭屍進程已釋放內存空間,不能被調度,僅僅是在進程列表中保留一個記錄,它記錄着子進程是如何結束的,退出狀態等信息。

 

父進程結束後,init進程(進程ID 1)將會接管子進程,它負責子進程的回收工作。

 

二、查看殭屍進程

[root@myhost ~]# ps -aux|grep defunct

root      4324  0.0  0.0      0     0 pts/0    Z+   09:39   0:00 [myzombie] <defunct>

root      4747  0.0  0.1   3912   684 pts/2    S+   09:54   0:00 grep defunct

 

其狀態爲”Z+”

 

 

三、消除殭屍進程

kill 命令並不能殺死殭屍進程

 

1.       顯式忽略SIGCHLD信號

 

signal(SIGCHLD, SIG_IGN); // 顯式忽略信號

 

2.       調用wait, waitpid函數

3.       fork兩次

4.       殺死父進程

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章