讲师中心 微信公众号
AI工具推荐 视频效率加速

Linux 孤儿进程为何不会拖垮系统

小杰同学_4622

小杰同学_4622

发布时间:2026-01-30 21:23:02

|

419人浏览过

|

来源于php中文网

原创

孤儿进程被 PID 1 的 init 进程(或 systemd)收养;内核在父进程退出时硬编码将其 ppid 改为 1,确保所有顶层孤儿均由 PID 1 管理,且 init 仅负责退出后的资源回收,不干预运行状态。

linux 孤儿进程为何不会拖垮系统

孤儿进程被谁收养?内核硬编码保障

孤儿进程不会拖垮系统,根本原因是 Linux 内核在子进程父进程退出的瞬间,就强制将其 ppid 改为 1 —— 也就是 PID 为 1 的 init 进程(现代系统多为 systemd,但依然以 PID 1 身份运行)。这不是可选行为,而是内核路径中硬编码的逻辑:exit_notify() 函数里直接调用 forget_original_parent(),再通过 find_new_reaper() 指定新父进程为 PID 1。

这意味着:你无法绕过它。即使你用 prctl(PR_SET_CHILD_SUBREAPER, 1) 让某个普通进程当 subreaper,它也只能收养自己直系后代的孤儿,而**所有顶层孤儿(即原父进程非 subreaper)仍归 PID 1 管**。

init 只做“善后”,不干涉运行

很多人误以为 init 会“接管”孤儿进程的执行——其实完全不会。init 唯一做的就是等它退出后调用 waitpid(-1, NULL, WNOHANG) 回收资源。只要孤儿进程还在跑(比如一个长期运行的守护进程),init 就只是安静地当个名义上的“养父”,不发信号、不改调度、不重定向 stdin/stdout。

  • 孤儿进程继续按原优先级、原 cgroup、原用户权限运行
  • 它的文件描述符、内存、信号掩码全都不变
  • init 不会主动 kill 它,也不会尝试读写它的管道或 socket

为什么桌面版 Ubuntu 看不到 ppid=1?

在较新桌面版 Ubuntu(如 22.04+ GNOME)中,你用 ps 查孤儿进程可能发现 PPID 不是 1,而是某个 session manager(如 gnome-session-binary)。这不是 bug,而是因为 systemd 启用了 Delegate=yes + 用户实例(user@.service)机制,让每个登录会话有自己的 subreaper 层级。此时真正收养的是该 session 的 manager,而非全局 PID 1 —— 但最终,这些 manager 自己仍是 PID 1 的子进程,资源回收链没断。

Linux installer
Linux installer

先解析安全源,运行本地CLI安装、启动、卸载Linux桌面应用。用户请求时使用。

下载

验证方法:用 ps -o pid,ppid,comm -p $PID 追一层父进程,大概率能看到它最终挂在 systemd --user 下,而后者又挂在 PID 1 的 systemd 下。

真正危险的不是孤儿,而是没回收的僵尸

孤儿进程本身不占资源;真正拖垮系统的,是大量未被回收的僵尸进程(Z 状态)。而孤儿进程恰恰**降低了僵尸风险**:因为 init 会定期轮询,只要它一退出,init 就立刻 wait() 掉它,释放 PID、内存页、打开的 fd 等。相比之下,如果父进程活着却忘了 waitpid(),子进程退出后就会卡在 Z 状态,直到父进程死亡或显式回收。

所以,与其担心孤儿,不如检查你的服务进程是否漏调 waitpid() 或设了 SIGCHLD handler 却没调 wait() —— 那才是僵尸温床。

热门AI工具

更多
讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

相关专题

更多
c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

529

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

1678

2024.03.01

session失效的原因
session失效的原因

session失效的原因有会话超时、会话数量限制、会话完整性检查、服务器重启、浏览器或设备问题等等。详细介绍:1、会话超时:服务器为Session设置了一个默认的超时时间,当用户在一段时间内没有与服务器交互时,Session将自动失效;2、会话数量限制:服务器为每个用户的Session数量设置了一个限制,当用户创建的Session数量超过这个限制时,最新的会覆盖最早的等等。

580

2023.10.17

session失效解决方法
session失效解决方法

session失效通常是由于 session 的生存时间过期或者服务器关闭导致的。其解决办法:1、延长session的生存时间;2、使用持久化存储;3、使用cookie;4、异步更新session;5、使用会话管理中间件。

876

2023.10.18

cookie与session的区别
cookie与session的区别

本专题整合了cookie与session的区别和使用方法等相关内容,阅读专题下面的文章了解更详细的内容。

1846

2025.08.19

session失效的原因
session失效的原因

session失效的原因有会话超时、会话数量限制、会话完整性检查、服务器重启、浏览器或设备问题等等。详细介绍:1、会话超时:服务器为Session设置了一个默认的超时时间,当用户在一段时间内没有与服务器交互时,Session将自动失效;2、会话数量限制:服务器为每个用户的Session数量设置了一个限制,当用户创建的Session数量超过这个限制时,最新的会覆盖最早的等等。

580

2023.10.17

session失效解决方法
session失效解决方法

session失效通常是由于 session 的生存时间过期或者服务器关闭导致的。其解决办法:1、延长session的生存时间;2、使用持久化存储;3、使用cookie;4、异步更新session;5、使用会话管理中间件。

876

2023.10.18

cookie与session的区别
cookie与session的区别

本专题整合了cookie与session的区别和使用方法等相关内容,阅读专题下面的文章了解更详细的内容。

1846

2025.08.19

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

80

2026.09.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn