面试中常被问到的(18)父子进程,孤儿进程及僵尸进程

Posted AllenSquirrel

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试中常被问到的(18)父子进程,孤儿进程及僵尸进程相关的知识,希望对你有一定的参考价值。

并发:

单核cpu多任务,宏观同一段时间内表现出同时运行,微观上实际为时间片轮转,同一时刻只能有一个进程占据cpu资源运行,多个任务执行存在先后顺序

并行:

多核cpu多任务,严格物理意义上的同时运行,多个任务运行在不同核上,相互之间不影响

(1)父子进程

子进程通过父进程创建,子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程什么时候结束。

当子进程退出的时候,内核会释放子进程所有资源,包括打开的文件,占用的内存等。但是依然会保留部分信息(进程id,退出状态,运行时间),直到父进程通过wait/waitpid来调用获取子进程状态信息后才释放

(2)孤儿进程

一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程,孤儿进程将被init进程(1号进程)托管,由init进程负责完成状态收集工作

(3)僵尸进程

子进程通过父进程创建,子进程退出,父进程没有调用wait/waitpid获取子进程状态,则子进程的进程描述符依然保存在系统中,形成僵尸进程

子进程结束后,父进程没来及调用wait/waitpid,会进入僵尸进程,如果父进程及时调用,子进程会从僵尸进程退出,但这个过程中也会经过僵尸进程

如果父进程在子进程结束之前退出,则子进程由init接管。init将会以父进程身份对僵尸状态的子进程进行处理

产生危害:资源泄漏(一种是pcb所占内存资源一直无法被回收,一种是一个用户所能创建的进程数量是有限制的,没有可用的进程号将导致系统不能产生新的进程)

解决方案:   

处理:退出父进程   

(1)内部fork两次,子进程变成孤儿进程,父进程由init进程担任实现托管

(2)外部通过kill指令消灭产生僵尸子进程的进程,使其变成孤儿进程,init托管 

避免:进程等待,信号处理函数wait接收子进程退出时向父进程发送的SIGCHILD信号

以上是关于面试中常被问到的(18)父子进程,孤儿进程及僵尸进程的主要内容,如果未能解决你的问题,请参考以下文章

面试中常被问到的(17)多线程及多进程优缺点

面试中常被问到的(16)进程间通信方式

面试中常被问到的(24)网络分层及协议

面试中常被问到的(14)虚存管理和虚拟地址空间

linux父子进程问题

面试中常被问到(12)进程与线程的区别