linux系統清理殭屍程序記錄

2022-05-09 01:15:07 字數 1059 閱讀 9147

在unix 系統中,乙個程序結束了,但是他的父程序沒有等待(呼叫wait / waitpid)他, 那麼他將變成乙個殭屍程序.  在fork()/execve()過程中,假設子程序結束時父程序仍存在,而父程序fork()之前既沒安裝sigchld訊號處理函式呼叫 waitpid()等待子程序結束,又沒有顯式忽略該訊號,則子程序成為殭屍程序。

如何檢視linux系統上的殭屍程序,如何統計有多少殭屍程序?

#ps -ef | grep defunct

或者查詢狀態為z的程序,z就是代表zombie process,殭屍程序的意思。

另外使用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殺不死,但是我們可以殺死殭屍程序的父程序。父程序死後,殭屍程序成為」孤兒程序」,過繼給1號程序init,init始終會負責清理殭屍程序.它產生的所有殭屍程序也跟著消失。

一步步講解

首先ps -eo ppid,stat

-e檢視所有程序,-o可以檢視使用者自定義的狀態,例如-o ppid檢視所有程序的ppid,可選項pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm

這裡我們選取ppid父程序的id和stat狀態

然後ps -eo ppid,stat|grep z從所有程序中的stat狀態中選擇狀態為z也就是zombie的程序

接著ps -eo ppid,stat|grep z|cut 1-5因為我們只要殭屍程序的父程序id,所以使用cut來選取父程序id

最後ps -eo ppid,stat|grep z|cut 1-5|xargs kill -9將前面選取的父程序id作為引數傳送給kill -9去執行。

到此我們殺死了所有殭屍程序的父程序,殭屍程序一般也都已經殺死了。

Linux 如何清理殭屍程序

今天在維護伺服器的時候,發現有5個nova novncproxy的殭屍程序。定義 in unix system terminology,a process that has terminated,but whose parent has not yet waited for it,is called...

自動清理殭屍程序及STOP程序指令碼

bin bash echo 殭屍程序 check ps a o stat,ppid,pid,cmd grep e zz if n check then echo 發現殭屍程序 for pid in ps a o stat,ppid,pid,cmd grep e zz awk do kill 9 pi...

Linux 殭屍程序

怎樣產生殭屍程序的 乙個程序在呼叫exit命令結束自己的生命的時候,其實它並沒有真正的被銷毀,而是留下乙個稱為殭屍程序 zombie 的資料結構 系統呼叫 exit,它的作用是使程序退出,但也僅僅限於將乙個正常的程序變成乙個殭屍程序,並不能將其完全銷毀 在linux程序的狀態中,殭屍程序是非常特殊的...