在top和ps命令中有一列顯示進程狀態,分別有如下值:
值 |
含義 |
S |
進程處於interruptable sleep狀態 |
D |
進程處於Uninterruptable sleep狀態 |
R |
進程處於運行狀態 |
Z |
進程處於僵屍狀態 |
T |
Stop模式,進程要么處於被調試狀態 |
【S進程】
進程等待某個資源處於sleep狀態,此時可以通過發送信號將這個進程喚醒。例如發送kill 信號。
【D進程】
進程在內核中某些不能被信號打斷,例如對某些硬件設備進行操作時刻(等待磁盤Io,等待網絡io等等)。
進程處於D狀態一般情況下很短暫,不應該被top或者ps看到。
如果進程在top和ps看到長期處於D狀態,那么可能進程在等待IO時出現了問題導致進程一直等待不到IO資源,此時如果要處理掉這個D進程,那么只能重啟整個系統才會恢復。因為此時整個進程無法被kill 掉。
【Z進程】
僵屍進程。
在Linux中,每個進程都有一個父進程,進程號叫PID(Process ID),父進程號叫PPID(Parent PID)。當進程死亡時,會關閉已經打開的文件,舍棄已經占用的內存,交換空間等公共資源,然后向父進程返回一個退出狀態值,報告死訊。
如果在報告的過程中出了問題,父進程不知道子進程死了,子進程便變成了僵屍。
Linux中,可以通過殺死父進程的方式來讓子進程消失。但是,僵屍進程並不占用任何資源,只是錯誤顯示,如果父進程正在跑業務,千萬不可以貿然殺死父進程。