主题
面试速答(先看这里)
**一句话结论:**所谓孤儿,就是无父无母了,那么孤儿进程指的就是一个进程的父进程没有了,即已经退出或者终止了,但是这个进程本身还在运行的情况。
60秒标准回答:
“孤儿进程”和“僵尸进程”是操作系统中两个常见的进程状态
所谓孤儿,就是无父无母了,那么孤儿进程指的就是一个进程的父进程没有了,即已经退出或者终止了,但是这个进程本身还在运行的情况
在Unix/Linux系统中 。有一个init进程,进程号为1,如果一个进程变成了孤儿进程,那么操作系统会把他的父进程重新指定为init进程。(就像是孤儿院一样。)
**答题顺序:**结论 → 原理/机制 → 关键流程 → 场景与取舍 → 易错点
回答主线:
- **要点1:**在Unix/Linux系统中 。
- **要点2:**举个栗子: 假设有一个进程A,它启动了进程B作为子进程。
- **要点3:**如果一个进程已经退出了,但是他还存在于进程表的话,那么这个进程就是僵尸进程。
- **要点4:**一个进程在结束后会向它的父进程发送一个退出信号(通常是 SIGCHLD ),并将退出状态保存下来。
- **要点5:**注意,如果系统中有大量的僵尸进程,可能会导致资源的浪费,因为这些进程仍然占据着有限的进程号。
**记忆锚点:**init → 举个栗子 → 僵尸进程 → 的父进程 → 系统中两个常见的进程 → 作系统会把他的父进程
关键取舍:
- 如果父进程没有及时处理这个退出信号,进程就会变成“僵尸进程”,即它已经不再执行任何任务,但它仍然占据着操作系统的某些资源(如进程号)。
- 僵尸进程占用的是进程号和一些资源,但它不再消耗CPU。
- 注意,如果系统中有大量的僵尸进程,可能会导致资源的浪费,因为这些进程仍然占据着有限的进程号。
易错提醒:
- 注意,如果系统中有大量的僵尸进程,可能会导致资源的浪费,因为这些进程仍然占据着有限的进程号。
加分表达:
- 有一个init进程,进程号为1,如果一个进程变成了孤儿进程,那么操作系统会把他的父进程重新指定为init进程。
- 如果进程A结束了(无论是正常结束还是异常终止),那么进程B就成了孤儿进程。
- 如果一个进程已经退出了,但是他还存在于进程表的话,那么这个进程就是僵尸进程。
追问准备:
- 围绕「init」:底层原理是什么?使用时有哪些边界和常见坑?
- 围绕「举个栗子」:底层原理是什么?使用时有哪些边界和常见坑?
- 围绕「僵尸进程」:底层原理是什么?使用时有哪些边界和常见坑?
- 如果线上出现异常,你会如何定位、验证并规避?
典型回答
“孤儿进程”和“僵尸进程”是操作系统中两个常见的进程状态。
孤儿进程
所谓孤儿,就是无父无母了,那么孤儿进程指的就是一个进程的父进程没有了,即已经退出或者终止了,但是这个进程本身还在运行的情况。
在Unix/Linux系统中 。有一个init进程,进程号为1,如果一个进程变成了孤儿进程,那么操作系统会把他的父进程重新指定为init进程。(就像是孤儿院一样。)
**举个栗子:**假设有一个进程A,它启动了进程B作为子进程。如果进程A结束了(无论是正常结束还是异常终止),那么进程B就成了孤儿进程。此时,操作系统会把进程B的父进程指向init进程。
僵尸进程
如果一个进程已经退出了,但是他还存在于进程表的话,那么这个进程就是僵尸进程。(虽然这些进程已经执行完毕,但它们的退出状态还没有被父进程回收。)
一个进程在结束后会向它的父进程发送一个退出信号(通常是SIGCHLD),并将退出状态保存下来。如果父进程没有及时处理这个退出信号,进程就会变成“僵尸进程”,即它已经不再执行任何任务,但它仍然占据着操作系统的某些资源(如进程号)。
举个栗子: 假设进程A启动了进程B,进程B完成了工作并退出。但如果进程A没有通过wait()获取进程B的退出状态,进程B就会变成僵尸进程。僵尸进程占用的是进程号和一些资源,但它不再消耗CPU。
注意,如果系统中有大量的僵尸进程,可能会导致资源的浪费,因为这些进程仍然占据着有限的进程号。