僵尸进程与孤儿进程
僵尸进程和孤儿进程都是子进程的特殊状态,来源于父子进程生命周期的不同步。
僵尸进程(Zombie Process):子进程已经终止,但父进程尚未调用 wait 回收其信息。此时子进程的内核数据结构(PCB)仍保留在系统中,记录退出状态和资源使用信息。用户空间已释放,不占用CPU,但内核空间仍被占用。
危害:如果父进程一直不回收,僵尸进程长期占用内核进程表条目。当进程表满时,系统无法创建新进程。这是一种资源泄漏。
解决:父进程调用 wait 或 waitpid 回收;或者父进程忽略 SIGCHLD 信号(某些系统自动回收),或父进程先终止使子进程变成孤儿进程由 init 回收。
孤儿进程(Orphan Process):父进程先于子进程终止。此时子进程被 init 进程(PID=1)收养。init 进程定期调用 wait 回收其收养的子进程,因此孤儿进程不会成为僵尸进程。
⚠️ 僵尸进程和孤儿进程都是指子进程。僵尸体现在内核空间未释放,孤立体现在父进程已不存在。两者都要注意避免——僵尸进程浪费系统资源,孤儿进程通常无害(但可能导致子进程行为异常,如依赖父进程的服务)。
链接到
- 上一个知识点:8.10 回收子进程wait
- 下一个知识点:8.12 加载并运行程序execve