僵尸进程是在Linux系统中一种特殊状态的进程,指一个子进程结束运行后,其父进程没有及时回收其资源,导致子进程的信息仍然保留在进程表中。
子进程结束而父进程未回收资源:
当一个子进程完成其任务并调用 exit()
系统调用时,它会向操作系统报告自己的退出状态。如果父进程没有调用 wait()
或 waitpid()
等系统调用来获取子进程的退出状态,该子进程就会变成僵尸进程。
父进程未处理SIGCHLD信号:
子进程退出时会发送一个 SIGCHLD
信号给父进程,通知父进程它已经结束。如果父进程没有处理这个信号或者没有调用 wait()
系列函数来清理子进程的状态,子进程就会变成僵尸进程。
ps aux
查看僵尸进程。虽然僵尸进程本身不占用资源,但它们仍然占用进程表中的一个条目,并且保留了一些退出状态信息。如果系统中出现大量僵尸进程,可能会导致可用进程号耗尽,从而使新进程无法创建,进而影响系统性能和稳定性。
wait()
或 waitpid()
函数来回收子进程的状态信息。SIGCHLD
信号,当子进程退出时,这个信号处理函数会被调用,然后可以安全地调用 wait()
或 waitpid()
来清理子进程。ps
命令结合 grep
来查找僵尸进程,然后通过杀死父进程来间接清理僵尸进程。通过合理的管理和清理僵尸进程,可以保持系统的健康和高效运行。