僵尸进程是指子进程已经结束,但其父进程没有调用 wait()
或 waitpid()
系统调用来回收子进程的资源,导致子进程的状态信息仍然保存在系统中。虽然僵尸进程本身不会执行任何操作,也不会占用大量的系统资源,但它们的累积会对系统产生以下危害:
-
内存资源浪费:每个僵尸进程都会占用一定的内存空间,用于保存其进程描述符(PCB),即使这些进程已经不再需要使用系统资源。如果系统中存在大量的僵尸进程,这些占用的内存将无法被其他进程使用,从而导致内存资源的浪费。
-
进程号耗尽:Linux 系统对进程号(PID)是有限制的。如果僵尸进程大量存在,会消耗大量的进程号,当进程号耗尽时,系统将无法创建新的进程,从而影响系统的正常运行。
-
数据结构占用:僵尸进程的进程描述符会一直保存在内存中,直到父进程调用
wait()
或waitpid()
回收这些资源。这种数据结构的持续存在会占用内核的数据结构空间,虽然每个僵尸进程占用的内存很小,但累积起来也可能影响系统的性能。 -
潜在的系统问题:如果僵尸进程大量积累,可能会导致系统在需要创建新进程时无法分配到可用的进程号,进而影响系统的稳定性和响应能力。