✅什么是“孤儿进程”,什么是“僵尸进程”?
典型回答
“孤儿进程”和“僵尸进程”是操作系统中两个常见的进程状态。
孤儿进程
所谓孤儿,就是无父无母了,那么孤儿进程指的就是一个进程的父进程没有了,即已经退出或者终止了,但是这个进程本身还在运行的情况。
在Unix/Linux系统中 。有一个init进程,进程号为1,如果一个进程变成了孤儿进程,那么操作系统会把他的父进程重新指定为init进程。(就像是孤儿院一样。)
**举个栗子:**假设有一个进程A,它启动了进程B作为子进程。如果进程A结束了(无论是正常结束还是异常终止),那么进程B就成了孤儿进程。此时,操作系统会把进程B的父进程指向init进程。
僵尸进程
如果一个进程已经退出了,但是他还存在于进程表的话,那么这个进程就是僵尸进程。(虽然这些进程已经执行完毕,但它们的退出状态还没有被父进程回收。)
一个进程在结束后会向它的父进程发送一个退出信号(通常是SIGCHLD),并将退出状态保存下来。如果父进程没有及时处理这个退出信号,进程就会变成“僵尸进程”,即它已经不再执行任何任务,但它仍然占据着操作系统的某些资源(如进程号)。
举个栗子: 假设进程A启动了进程B,进程B完成了工作并退出。但如果进程A没有通过wait()获取进程B的退出状态,进程B就会变成僵尸进程。僵尸进程占用的是进程号和一些资源,但它不再消耗CPU。
注意,如果系统中有大量的僵尸进程,可能会导致资源的浪费,因为这些进程仍然占据着有限的进程号。