僵尸进程
僵尸进程是指完成执行但仍在进程表中保留记录的进程。这类进程已经完成了它的工作,并正常退出,但是它的父进程没有调用wait()
或waitpid()
函数来获取子进程的终止状态,因此它在进程表中仍占有一个位置。在这种状态下的进程被称为“僵尸”进程。
举例
例如在一个Unix系统中,当一个子进程完成任务后,它会发送一个SIGCHLD信号给父进程。如果父进程没有正确处理这个信号(通常是通过调用wait()
来读取子进程的退出状态),那么子进程的进程描述符和相关资源不会被完全释放,从而变成僵尸进程。如果系统中存在大量僵尸进程,可能会耗尽系统资源,影响系统性能。
孤儿进程
孤儿进程是指父进程已经结束或异常退出,而子进程还在运行的进程。这些孤儿进程将被init进程(进程号为1的进程)所收养,并成为init的子进程。init进程会定期调用wait()
来清理已经结束的子进程,确保不会有僵尸进程。
举例
假设有一个父进程创建了一个子进程,然后父进程由于某些原因(比如异常或者终止)结束了。这时候子进程还在继续运行,但已没有了父进程,这个子进程就成为了孤儿进程。由于Unix系统设计的机制,init进程会自动成为这个孤儿进程的新父进程,并负责处理孤儿进程的退出状态。
总结
总的来说,僵尸进程和孤儿进程是两种不同的进程状态,其生命周期和系统资源管理有着密切的关系。系统管理员和程序员需要妥善管理这些进程,避免系统资源的浪费或耗尽。