1. 程式人生 > >什麽是僵屍進程?如何找出並清理

什麽是僵屍進程?如何找出並清理

示例 com ado 問題 應該 rep 等待 處理 情況下

“僵屍進程Zombie Processes”

僵屍進程就是指:一個進程執行了exit系統調用退出,而其父進程並沒有為它收屍(調用wait或waitpid來獲得它的結束狀態)的進程。

任何一個子進程(init除外)在exit後並非馬上就消失,而是留下一個稱外僵屍進程的數據結構,等待父進程處理。這是每個子進程都必需經歷的階段。另外子進程退出的時候會向其父進程發送一個SIGCHLD信號。

說得形象一點就是:

Linux 系統中僵屍進程和現實中僵屍(雖然我也沒見過)類似,雖然已經死了,但是由於沒人給它們收屍,還能四處走動。僵屍進程指的是那些雖然已經終止的進程,但仍然保留一些信息,等待其父進程為其收屍。

僵屍進程對系統有害嗎?

不會。由於僵屍進程並不做任何事情, 不會使用任何資源也不會影響其它進程, 因此存在僵屍進程也沒什麽壞處。 不過由於進程表中的退出狀態以及其它一些進程信息也是存儲在內存中的,因此存在太多僵屍進程有時也會是一些問題。

怎麽查看找出和清理?
技術分享圖片

這裏暫時沒發現僵屍,示例圖片就意思一下具體的方法~

通過命令找出僵屍進程pid : ps aux | grep Z
技術分享圖片

查找到對應的ppid父進程,重啟父進程就可以自動回收僵屍進程
ps -ef|grep 21343
技術分享圖片

或者
不重啟服務,直接kill 該僵屍進程pid

正常情況下我們可以用 SIGKILL 信號來殺死進程,但是僵屍進程已經死了, 你不能殺死已經死掉的東西。 因此你需要輸入的命令應該是

kill -s SIGCHLD pid

什麽是僵屍進程?如何找出並清理