在 Linux 中,“进程启动顺序”可以从系统启动角度和进程创建角度两个层面来理解。下面分别说明。
以常见的 Linux + systemd 系统为例(嵌入式或 SysVinit 略有不同):
vmlinuz 和 initramfs/sbin/init(或 systemd)local-fs.target(挂载文件系统)swap.targetsysinit.targetbasic.targetmulti-user.target(命令行)graphical.target(图形界面)getty / login / gdmBIOS/UEFI
→ Bootloader
→ Linux Kernel
→ /sbin/init (systemd, PID 1)
→ targets & services
→ login / shell
当一个“新进程”被启动时:
fork()exec()main()pid_t pid = fork();
if (pid == 0) {
execvp("ls", args);
}
After=network.target
Requires=redis.service
nice / reniceps -axo pid,ppid,comm
pstree
systemctl list-units --type=service
dmesg
如果你指的是:
可以告诉我,我可以更针对性说明。