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系統出現這個錯誤,請問怎麼回事?這還沒到安裝的時候...