歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

LINUX僵屍進程處理

LINUX僵屍進程處理   1 什麼是僵屍進程: 當子進程比父進程先結束,而父進程又沒有回收子進程,釋放子進程占用的資源,此時子進程將成為一個僵屍進程。如果父進程先退出 ,子進程被init接管,子進程退出後init會回收其占用的相關資源。   2 怎樣來清除僵屍進程:    1.改寫父進程,在子進程死後要為它收屍。具體做法是接管SIGCHLD信號。子進程死後,會發送SIGCHLD信號給父進程,父進程收到此信號後,執行waitpid()函數為子進程收屍。這是基於這樣的原理:就算父進程沒有調用wait,內核也會向它發送SIGCHLD消息,盡管對的默認處理是忽略,如果想響應這個消息,可以設置一個處理函數。    2.把父進程殺掉。父進程死後,僵屍進程成為"孤兒進程",過繼給1號進程init,init始終會負責清理僵屍進程.它產生的所有僵屍進程也跟著消失。 3 僵屍進程的危害: 在Unix系統管理中,當用ps命令觀察進程的執行狀態時,經常看到某些進程的狀態欄為defunct,這就是所謂的“僵屍”進程。“僵屍”進程是一個早已死亡的進程,但在進程表(processs table)中仍占了一個位置(slot)。由於進程表的容量是有限的,所以,defunct進程不僅占用系統的內存資源,影響系統的性能,而且如果其數目太多,還會導致系統癱瘓。   這裡介紹linux 環境下的處理僵屍進程的方法: 使用  ps -efl|awk '$2~/Z/{print}' 查找僵屍進程 [root@rac3 ~]#  ps -efl|awk '$2~/Z/{print}'   0 Z root     28212 28201  0  85   0 -     0 exit   Sep25 ?        00:00:00 [xrdb] <defunct> 或者使用如下語句 [root@rac3 ~]# ps -A -ostat,ppid,pid,cmd | grep -e '^[Zz]' Z    28201 28212 [xrdb] <defunct> 如果僵屍進程很多可以使用如下語句: ps -efl | awk '$2~/Z/{print“kill -9 ” $4,$5}' 生成殺進程的腳本。 如果kill子進程的無效,則kill 其父進程來解決問題 [root@rac3 ~]# kill -HUP 28201 [root@rac3 ~]# ps -A -ostat,ppid,pid,cmd | grep -e '^[Zz]' [root@rac3 ~]# top top - 19:38:50 up 21 days,  3:42,  1 user,  load average: 0.00, 0.00, 0.00 Tasks: 173 total,   2 running, 170 sleeping,   0 stopped,   0 zombie Cpu(s):  0.3%us,  0.0%sy,  0.0%ni, 99.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st Mem:   4044784k total,  3606476k used,   438308k free,   208260k buffers Swap:  4192956k total,        0k used,  4192956k free,  2689704k cached  
Copyright © Linux教程網 All Rights Reserved