Centos7清理僵屍進程


僵屍進程定義:
     In UNIX System terminology, a process that has terminated,but whose parent has not yet waited for it, is called a zombie.
     在UNIX 系統中,一個進程結束了,但是他的父進程沒有等待(調用wait / waitpid)他, 那么他將變成一個僵屍進程.  在fork()/execve()過程中,假設子進程結束時父進程仍存在,而父進程fork()之前既沒安裝SIGCHLD信號處理函數調用 waitpid()等待子進程結束,又沒有顯式忽略該信號,則子進程成為僵屍進程。
 
如何查看linux系統上的僵屍進程,如何統計有多少僵屍進程?
#ps -ef | grep defunct
或者查找狀態為Z的進程,Z就是代表zombie process,僵屍進程的意思。
#ps -A -o stat,ppid,pid,cmd | grep -e '^ [Zz]'
另外使用top命令查看時有一欄為S,如果狀態為Z說明它就是僵屍進程。
Tasks:  95 total,   1 running,  94 sleeping,   0 stopped,   0 zombie
top命令中也統計了僵屍進程。或者使用下面的命令:
ps -ef | grep defunct | grep -v grep | wc -l
 
如何殺死僵屍進程呢?
一般僵屍進程很難直接kill掉,不過您可以kill僵屍進程的父進程。父進程死后,僵屍進程成為”孤兒進程”,過繼給1號進程init,init始終會負責清理僵屍進程.它產生的所有僵屍進程也跟着消失。
ps -A -o stat,ppid,pid,cmd | grep -e '^ [Zz]' | awk '{print $2}' | xargs kill -9 
ps -e -o ppid,stat | grep Z | cut -d” ” -f2 | xargs kill -9
kill -HUP `ps -A -ostat,ppid | grep -e ’^[Zz]‘ | awk ’{print $2}’`


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM