僵尸進程
僵尸進程是指一個已經終止、但是其父進程尚未對其進行善后處理獲取終止進程的有關信息的進程,這個進程被稱為“僵尸進程”(zombie)。
怎樣產生僵尸進程
一個進程在調用exit命令結束自己的生命的時候,其實它并沒有真正的被銷毀,而是留下一個稱為僵尸進程(Zombie)的數據結構(系統調用exit, 它的作用是使進程退出,但也僅僅限于將一個正常的進程變成一個僵尸進程,并不能將其完全銷毀)。
在Linux進程的狀態中,僵尸進程是非常特殊的一種,它已經放棄了幾乎所有內存空間,沒有任何可執行代碼,也不能被調度,僅僅在進程列表中保留一個位 置,記載該進程的退出狀態等信息供其他進程收集。除此之外,僵尸進程不再占有任何內存空間。它需要它的父進程來為它收尸,如果他的父進程沒安裝 SIGCHLD 信號處理函數調用wait或waitpid()等待子進程結束,又沒有顯式忽略該信號,那么它就一直保持僵尸狀態,如果這時父進程結束了, 那么init進程自動會接手這個子進程,為它收尸,它還是能被清除的。但是如果如果父進程是一個循環,不會結束,那么子進程就會一直保持僵尸狀態,這就是 為什么系統中有時會有很多的僵尸進程。
怎么查看僵尸進程
利用命令ps,可以看到有父進程ID為1的進程是孤兒進程;s(state)狀態為Z的是僵尸進程。
#include<stdio.h>
#include<unistd.h>
#