什麼是 Linux 中的殭屍程序?
殭屍程序是指一個程序已經執行完畢,但其條目仍然存在於程序表中。殭屍程序通常發生在子程序中,因為父程序仍然需要讀取其子程序的退出狀態。一旦使用 wait 系統呼叫完成此操作,殭屍程序就會從程序表中刪除。這被稱為“回收”殭屍程序。
演示殭屍程序建立和終止的圖表如下所示:

殭屍程序的要點
與殭屍程序相關的一些要點如下:
- 當程序使用 exit() 系統呼叫終止時,分配給該程序的所有記憶體和資源都會被釋放。但是,該程序在程序表中的條目仍然可用。此程序現在成為殭屍程序。
- 父程序可以使用 wait() 系統呼叫讀取殭屍程序的退出狀態。之後,殭屍程序將從系統中移除。然後,殭屍程序的程序 ID 和程序表條目可以被重用。
- 如果父程序不使用 wait() 系統呼叫,則殭屍程序將保留在程序表中。這會導致資源洩漏。
- 如果父程序不再執行,則殭屍程序的存在表明作業系統存在錯誤。如果殭屍程序數量很少,這可能不是一個嚴重的問題,但在負載較重的情況下,這可能會給系統帶來問題,例如耗盡程序表條目。
- 可以透過向父程序傳送 SIGCHLD 訊號(使用 kill 命令)將殭屍程序從系統中移除。如果父程序仍然沒有從程序表中刪除殭屍程序,則如果可以接受,則終止父程序。
殭屍程序的危害
殭屍程序不使用任何系統資源,但它們確實保留了它們的程序 ID。如果存在大量殭屍程序,則所有可用的程序 ID 都被它們獨佔。這阻止了其他程序執行,因為沒有可用的程序 ID。
如果它們的父程序不再執行,則殭屍程序的存在也表明作業系統存在錯誤。如果殭屍程序數量很少,這可能不是一個嚴重的問題,但在負載較重的情況下,這可能會給系統帶來問題。
殺死殭屍程序
可以透過向父程序傳送 SIGCHLD 訊號(使用 kill 命令)殺死殭屍程序。此訊號通知父程序使用 wait() 系統呼叫清理殭屍程序。此訊號是使用 kill 命令傳送的。演示如下:
kill -s SIGCHLD pid
在上面的命令中,pid 是父程序的程序 ID。
廣告
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP