在 Linux 中,**孤儿进程(Orphan Process)**指的是:
父进程已经结束(退出),但子进程还在运行的进程。
正常流程是这样的:
fork())示例:
pid_t pid = fork();
if (pid == 0) {
// 子进程
sleep(100); // 父进程已退出,子进程还在运行
} else {
// 父进程
exit(0);
}
孤儿进程不会一直没人管,Linux 会自动把它们“收养”。
收养后:
不是!这是两个完全不同的概念
| 对比项 | 孤儿进程 | 僵尸进程 |
|---|---|---|
| 父进程 | 已退出 | 还在 |
| 子进程状态 | 仍在运行 | 已退出 |
| 是否有进程实体 | ✅ 有 | ❌ 没有(只剩进程表项) |
| 危害 | 通常无害 | 大量存在会占用 PID |
| 回收方式 | init 自动回收 | 父进程 wait() |
ps -ef
如果看到某个进程的 PPID 是 1,且不是系统服务,很可能是孤儿进程:
UID PID PPID C STIME TTY CMD
user 1234 1 0 10:00 pts/0 ./test
✅ 一般没有危害
⚠️ 只有在以下情况可能出问题:
孤儿进程就是“爹死了但儿子还活着”的进程,Linux 会让 init(PID 1)来接管它,不会造成问题。
如果你愿意,我也可以帮你对比 孤儿进程 / 僵尸进程 / 守护进程 的区别。