如何kill殺掉linu系統中的殭屍defunct程序

2021-12-23 09:11:48 字數 1387 閱讀 8587

1樓:

在 unix系統管理中,當用ps命令觀察程序的執行狀態時,經常看到某些程序的狀態列為defunct,這就是所謂的「殭屍」程序。「殭屍」程序是一個早已 死亡的程序,但在程序表(processs table)中仍佔了一個位置(slot)。由於程序表的容量是有限的,所以,defunct程序不僅佔用系統的記憶體資源,影響系統的效能,而且如果其數 目太多,還會導致系統癱瘓。

我們知道,每個unix程序在程序表裡都有一個進入點(entry),核心程式執行該程序時使用到的一切資訊都儲存在進入點。當用ps命令察看系統中的程序資訊時,看到的就是程序表中的相關資料。當以fork()系統呼叫建立一個新的程序後,核心程序就會在程序表中給這個新程序分配一個進入點,然後將相關資訊儲存在該進入點所對應的程序表內。

這些資訊中有一項是其父程序的識別碼。當這個程序走完了自己的生命週期後,它會執行exit()系統呼叫,此時原來進 程表中的資料會被該程序的退出碼(exit code)、執行時所用的cpu時間等資料所取代,這些資料會一直保留到系統將它傳遞給它的父程序為止。由此可見,defunct程序的出現時間是在子進 程終止後,但是父程序尚未讀取這些資料之前。

defunct程序是不能直接kill -9殺掉的,否則就不叫殭屍程序了。

找到該defunct殭屍程序的父程序,將該程序的父程序殺掉,則此defunct程序將自動消失。

找到defunct殭屍程序的父程序?:ps -ef | grep defunct_process_pid。

kill 找到的這個殭屍程序的父程序。

在fork()/execve()過程中,假設子程序結束時父程序仍存在,而父程序fork()之前既沒安裝sigchld訊號處理函式呼叫waitpid()等待子程序結束,又沒有顯式忽略該訊號,則子程序成為殭屍程序,無法正常結束,此時即使是root身份kill -9也不能殺死殭屍程序。補救辦法是殺死殭屍程序的父程序(殭屍程序的父程序必然存在),殭屍程序成為」孤兒程序」,過繼給1號程序init,init始終會負責清理殭屍程序。

linux中如何殺掉殭屍程序

2樓:吉祥二進位制

1、使用top命令就可以檢視到殭屍程序。

2、檢視具體程序pid

#ps -a -o stat,ppid,pid,cmd |grep -e "^[zz]"

說明:不是查不出殭屍程序,是因為我重啟了系統,沒有殭屍程序。

3、殺死殭屍程序

#kill -9 pid號

3樓:仁斯實嘉澤

其實殭屍程序的資源已經收回,只是在程序描述表裡面還在而已,所以除非重啟系統,否則你是殺不掉殭屍程序的,他們已經被init程序管理

可以不必理會

在linu系統中什麼是dns它的作用是什麼

dns,domain name system或者domain name service 域名 系統或者餘名服務 域名系統為inter 上的主機分配域名地址和ip地址。使用者使用域名地址,該系統就會自動把域名地址轉為ip地址。域名服務是執行域名系統的inter 工具。執行域名服務的伺服器稱之為dns伺...

如何在虛擬機器linu中讀取windows中硬碟檔案

windows和unix之間的檔案交換 1 通過vmware進行交換。如上所說的進入setting options shared folders add,可以把windows的資料夾和linux的資料夾新增進去,然後到系統裡把該資料夾設為共享.這樣在linux下看windows的共享資料夾就如區域網...

安裝linu系統失敗這是什麼原因?如何解決

請貼上你的圖啊,不然怎麼判斷 交給linux大神吧,去linux貼吧問問!雖然我以前裝過linux,但是忘記了 硬碟模式可以在bios設定中換一種,或是系統32位64位有沒有相容硬體 您好 會不會是系統檔案殘缺呢?如果滿意請您採納好麼?安裝linux系統出現這個錯誤,請問怎麼回事?這還沒到安裝的時候...