前言
对于生在智能时代的我们,对关机和重启这两个概念肯定不会陌生,尤其经历早期Android智能机的人们,印象最深恐怕就是重启,当然现在不会了,还没有改过来的都被淘汰了。在Linux系统中我们使用reboot完成这个动作,下面以rk px30 linux4.4.194为例,分析这个过程。
应用层
重启reboot基本上都是通过一条命令实现,之所以聊一下应用层,主要是新的系统中reboot shutdown halt 等,这些操作被systemd统一管理了,也就是说reboot,shutdown,halt等命令是指向systemctl的软链接,执行reboot相当于执行 systemctl reboot,systemctl reboot 会切换到 reboot.target.
![]()
下面使用systemd进行系统关闭/重启的依赖关系图:
(conflicts with (conflicts with
all system all file system
services) mounts, swaps,
| cryptsetup
| devices, ...)
| |
v v
shutdown.target umount.target
| |
\_______ ______/
\ /
v
(various low-level
services)
|
v
final.target
|
_____________________________________/ \_________________________________
/ | | \
| | | |
v v v v
systemd-reboot.service systemd-poweroff.service systemd-halt.service systemd-kexec.service
| | | |
v v v v
reboot.target poweroff.target halt.target kexec.target

本文深入剖析了Linux系统中reboot命令的工作流程,从应用层的systemd管理到内核层面的系统调用,详细解释了每个阶段的任务,包括服务停止、依赖处理、系统状态变更、硬件复位等步骤,最后探讨了不同重启命令的实现差异。
最低0.47元/天 解锁文章
799

被折叠的 条评论
为什么被折叠?



