在Linux系统中,僵尸进程(Zombie Process)是一种特殊状态的进程,指的是一个进程已经结束,但其父进程尚未调用wait()
或waitpid()
系统调用来回收其资源,导致子进程的进程描述符仍然保存在系统中。
fork()
创建子进程,如果子进程退出而父进程没有调用wait()
或waitpid()
来获取子进程的状态信息,那么这个子进程就会变成一个僵尸进程。wait()
或waitpid()
来等待子进程结束,并回收其资源。SIGCHLD
信号处理函数,当子进程结束时,父进程会收到SIGCHLD
信号,并在信号处理函数中调用wait()
或waitpid()
来回收子进程。init
进程(进程号为1)接管并回收。wait()
或waitpid()
来回收资源。signal(SIGCHLD, SIG_IGN)
通知内核对子进程的结束不感兴趣,这样内核会在子进程结束后自动回收其资源。fork()
两次的技巧,使子进程的父进程不是直接由用户进程而是由init
进程接管,从而避免僵尸进程的产生。总之,虽然僵尸进程在技术上是“死亡”的,但它们仍然占用系统资源,可能导致系统资源耗尽或性能下降。因此,及时清理僵尸进程对于维护系统的稳定性和性能至关重要。