僵尸進程是指子進程已經結束,但其父進程沒有調用 wait()
或 waitpid()
系統調用來回收子進程的資源,導致子進程的狀態信息仍然保存在系統中。雖然僵尸進程本身不會執行任何操作,也不會占用大量的系統資源,但它們的累積會對系統產生以下危害:
內存資源浪費:每個僵尸進程都會占用一定的內存空間,用于保存其進程描述符(PCB),即使這些進程已經不再需要使用系統資源。如果系統中存在大量的僵尸進程,這些占用的內存將無法被其他進程使用,從而導致內存資源的浪費。
進程號耗盡:Linux 系統對進程號(PID)是有限制的。如果僵尸進程大量存在,會消耗大量的進程號,當進程號耗盡時,系統將無法創建新的進程,從而影響系統的正常運行。
數據結構占用:僵尸進程的進程描述符會一直保存在內存中,直到父進程調用 wait()
或 waitpid()
回收這些資源。這種數據結構的持續存在會占用內核的數據結構空間,雖然每個僵尸進程占用的內存很小,但累積起來也可能影響系統的性能。
潛在的系統問題:如果僵尸進程大量積累,可能會導致系統在需要創建新進程時無法分配到可用的進程號,進而影響系統的穩定性和響應能力。