原住民族考試四等考試-電子工程類科計算機概要105 年第 38 題單選題
下列有關 UNIX 作業系統中所稱的殭屍程序(zombie process)之敘述何者錯誤?
A殭屍程序永遠不會被排入中央處理器執行
B殭屍程序的識別碼(id)不會儲存於程序表(process table)中正確答案
C殭屍程序可能導致無法產生新程序
D殭屍程序曾開啟的檔案會被關閉
B正確答案
殭屍程序是已終止但父程序尚未 wait() 回收的程序,其 PID 仍保留在程序表中以供父程序讀取退出狀態。
為什麼答案是 B
錯誤敘述,本題要選。殭屍程序的 PID 與 exit status 仍「保留」在 process table 中,正是為了讓父程序能讀取其結束狀態;若已移除就不叫殭屍了。
載入中…
完整詳解
Pro · 無限重點 殭屍程序是已終止但父程序尚未 wait() 回收的程序,其 PID 仍保留在程序表中以供父程序讀取退出狀態。
反向題找錯誤!殭屍程序的 PID 必須留在 process table 等父程序回收,所以 B 錯。
逐選項分析
A✕
正確敘述。殭屍程序已經執行完畢(terminated),不會再被排程到 CPU 執行,只是等待父程序呼叫 wait() 回收其 exit status。
B✓ 正確
錯誤敘述,本題要選。殭屍程序的 PID 與 exit status 仍「保留」在 process table 中,正是為了讓父程序能讀取其結束狀態;若已移除就不叫殭屍了。
C✕
正確敘述。殭屍佔用 process table 一個 entry,若大量累積會耗盡 PID 資源,導致系統無法 fork 新程序。
D✕
正確敘述。程序終止時,OS 會回收大部分資源:關閉開啟的檔案、釋放記憶體等,僅保留 process table entry 與 exit status。
殭屍程序 vs 孤兒程序
| 項目 | 殭屍 Zombie | 孤兒 Orphan |
|---|
| 定義 | 子已死、父未 wait() | 父先死、子仍活著 |
| 狀態 | 已終止 (terminated) | 仍在執行 |
| process table | 仍保留 entry | 由 init(PID 1) 收養 |
| 危害 | 佔 PID、耗盡程序表 | 一般無害 |
B 選項把殭屍程序的本質「反過來說」。殭屍之所以叫 zombie,就是因為『屍體還在』—— process table 裡的 PID 尚未被清除。若 PID 不在表中,就已經是完全消失,不叫殭屍了。