0

0

Linux系统运行机制深入理解_核心组件协同解析【教程】

舞夢輝影

舞夢輝影

发布时间:2026-01-07 19:08:32

|

259人浏览过

|

来源于php中文网

原创

现代主流发行版中第一个用户空间进程是/sbin/init,但它是指向/lib/systemd/systemd的符号链接;init是传统概念,systemd是当前标准实现,负责服务管理、挂载、socket激活等。

linux系统运行机制深入理解_核心组件协同解析【教程】

Linux 系统不是靠某个“核心程序”启动并维持运行的,而是由多个松耦合但职责明确的组件在内核调度下协同工作;理解它,关键不是背名词,而是看清 init 怎么交出控制权、systemd 如何接管服务生命周期、以及 /proc/sys 这类伪文件系统怎么成为用户空间与内核交互的实时通道。

开机后第一个用户空间进程是谁?init 还是 systemd

现代主流发行版(如 Ubuntu 22.04+、CentOS 8+、Fedora)中,内核启动后执行的第一个用户空间进程是 /sbin/init,但它通常只是指向 systemd 的符号链接:

ls -l /sbin/init
lrwxrwxrwx 1 root root 22 Jun 10 10:22 /sbin/init -> /lib/systemd/systemd

这意味着:

  • init 是传统概念,代表“系统初始化进程”,PID 恒为 1;
  • systemd 是当前事实标准实现,它不只是启动服务,还管理挂载点、socket 激活、cgroup 资源隔离、日志转发等;
  • 若你手动替换 /sbin/initbusybox initsysvinit,系统会退回到传统启动流程,但多数新内核已默认禁用 sysvinit 兼容路径。

systemd 启动服务时,为什么有些服务没写 ExecStart= 也能跑?

因为 systemd 支持多种激活机制,不依赖轮询或固定命令行:

Shell脚本编写基础 中文WORD版
Shell脚本编写基础 中文WORD版

Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言。作为命令语言,它交互式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。它虽然不是Linux系统核心的一部分,但它调用了系统核心的大部分功能来执行程序、建立文件并以并行的方式协调各个程序的运行。因此,对于用户来说,shell是最重要的实用程序,深入了解和熟练掌握shell的特性极其使用方法,是用好Linux系统

下载
  • SocketActivated:服务由 .socket 单元监听端口(如 sshd.socket),首次连接才拉起 sshd.service
  • PathActivated:监控文件变化(如 /var/log/messages 新增日志)触发服务;
  • TimerActivated:类似 cron,但基于高精度 monotonic 时间(如 logrotate.timer);
  • 部分服务甚至没有 ExecStart,只靠 Type=notify + sd_notify(0, "READY=1") 告知 systemd “我准备好了”。

查证方式:

systemctl cat sshd.socket
systemctl show --property=TriggeredBy sshd.service

/proc/sys 都能看内核状态,区别在哪?

二者都是内存中的虚拟文件系统,但设计目标完全不同:

  • /proc 主要暴露**进程和内核运行时快照**:比如 /proc/1/cmdline 是 PID 1 的启动命令,/proc/sys/net/ipv4/ip_forward 控制 IP 转发开关;
  • /sys 是**设备与驱动模型的结构化视图**,强调层级和属性:比如 /sys/class/net/eth0/operstate 表示网卡当前操作状态,/sys/devices/virtual/tty/ttyS0/device 指向其父设备;
  • 改动 /proc/sys/ 下参数等价于调用 sysctl;而写 /sys/ 下某些节点(如 power/state)会直接触发内核行为(如休眠);
  • 误写 /sys 中只读节点会返回 Invalid argument,而非权限拒绝——这是内核主动拦截,不是文件系统权限问题。

为什么 ps 看到的进程状态和 /proc/[pid]/stat 不一致?

因为 ps 显示的是采样时刻的**近似状态**,而 /proc/[pid]/stat 第三个字段(state)是内核任务结构体 task_struct->state 的原始值,含义更精确:

  • psS(可中断睡眠)、D(不可中断睡眠)都简标为 S
  • /proc/[pid]/statD 状态进程无法被信号中断(常见于磁盘 I/O 卡住),此时 kill -9 也无效;
  • R+ps 输出)表示该进程在运行队列中等待 CPU,但未必正在执行;而 /proc/[pid]/statR 表示 kernel 正在调度它执行(极短暂);
  • 想确认是否真卡死,优先看 /proc/[pid]/stack(需 root)或 cat /proc/[pid]/status | grep State

内核对进程状态的抽象比 shell 工具显示的精细得多,过度依赖 ps 容易误判阻塞类型。

相关专题

更多
golang结构体相关大全
golang结构体相关大全

本专题整合了golang结构体相关大全,想了解更多内容,请阅读专题下面的文章。

194

2025.06.09

golang结构体方法
golang结构体方法

本专题整合了golang结构体相关内容,请阅读专题下面的文章了解更多。

186

2025.07.04

class在c语言中的意思
class在c语言中的意思

在C语言中,"class" 是一个关键字,用于定义一个类。想了解更多class的相关内容,可以阅读本专题下面的文章。

462

2024.01.03

python中class的含义
python中class的含义

本专题整合了python中class的相关内容,阅读专题下面的文章了解更多详细内容。

12

2025.12.06

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

1347

2023.06.21

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

700

2023.06.29

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

294

2023.06.30

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

776

2023.07.05

java学习网站推荐汇总
java学习网站推荐汇总

本专题整合了java学习网站相关内容,阅读专题下面的文章了解更多详细内容。

6

2026.01.08

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 6.8万人学习

Git 教程
Git 教程

共21课时 | 2.5万人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号