进程控制(六)---孤儿进程和僵尸进程
时间:2022-04-03 12:16
考虑下面两种情况:
发生此种情况的时候,子进程便成为 孤儿进程。系统中的所有孤儿进程都会被 init 进程领养,init 进程的进程 ID 始终为 1。系统内当有进程终止的时候,内核会去检查所有的进程是否为该终止进程的子进程,如果是,则将其父进程 ID 修改为 1,即被 init 进程领养。init 进程保证会去 wait 每个子进程的退出。这样一来,就可以保证系统内的所有进程都有父进程。当一个孤儿进程被 init 进程领养的时候,孤儿进程将会由前台进程转为后台进程,也就是说敲入 ctrl+c 是终止不了该进程的。
当子进程 先于 父进程 退出的时候,如果此时父进程没有去使用 wait 或者 waitpid 函数去等待子进程退出,那么子进程的 内核资源(PCB)将不能被回收,则此子进程称为僵尸进程。由此可见,如果出现大量的僵尸进程,那么那些无法回收的 PCB 会占用内核的资源,也可以称为一种内存泄漏。