为什么 Ubuntu 18.04 使用 `/sbin/init` 而不是 `systemd`?
Why Ubuntu 18.04 use `/sbin/init` instead of `systemd`?
首先,这是我的系统环境:
# cat /proc/version
Linux version 4.15.0-52-generic (buildd@lgw01-amd64-051) (gcc version 7.3.0 (Ubuntu 7.3.0-16ubuntu3)) #56-Ubuntu SMP Tue Jun 4 22:49:08 UTC 2019
# cat /etc/issue
Ubuntu 18.04.2 LTS \n \l
参考这个Ubuntu Wiki,ubuntu从15.04开始默认使用Systemd,Systemd以/sbin/init
的PID 1运行。但是,我在 ubuntu 18.04:
上发现了不同的结果
# ps aux | awk '==1{print [=13=]}'
root 1 0.0 0.8 159692 8784 ? Ss Oct24 0:21 /sbin/init noibrs splash
# lsof -p 1 | grep txt
systemd 1 root txt REG 252,1 1595792 927033 /lib/systemd/systemd
那么,我的问题是:
为什么 Ubuntu 18.04 使用 /sbin/init
而不是 /lib/systemd/systemd
?
为什么PID 1的进程是/sbin/init
而lsof -p 1 | grep txt
return/lib/systemd/systemd
?
/sbin/init
是一个符号 link 到 /lib/systemd/systemd
看看stat /sbin/init
或readlink /sbin/init
的输出
这就是他们所说的 systemd "running as /sbin/init"。 systemd 二进制文件被 link 编辑为 /sbin/init
并以 link 名称启动。
更新
进一步解释 ps
和 lsof
输出之间的区别:ps
显示启动进程的命令,而 lsof
显示哪些文件进程已打开。
当 systemd 启动时,它被 /sbin/init noibrs splash
调用,文件系统将 link 解析为文件 /lib/systemd/systemd
,然后从磁盘读取并执行。
首先,这是我的系统环境:
# cat /proc/version
Linux version 4.15.0-52-generic (buildd@lgw01-amd64-051) (gcc version 7.3.0 (Ubuntu 7.3.0-16ubuntu3)) #56-Ubuntu SMP Tue Jun 4 22:49:08 UTC 2019
# cat /etc/issue
Ubuntu 18.04.2 LTS \n \l
参考这个Ubuntu Wiki,ubuntu从15.04开始默认使用Systemd,Systemd以/sbin/init
的PID 1运行。但是,我在 ubuntu 18.04:
# ps aux | awk '==1{print [=13=]}'
root 1 0.0 0.8 159692 8784 ? Ss Oct24 0:21 /sbin/init noibrs splash
# lsof -p 1 | grep txt
systemd 1 root txt REG 252,1 1595792 927033 /lib/systemd/systemd
那么,我的问题是:
为什么 Ubuntu 18.04 使用
/sbin/init
而不是/lib/systemd/systemd
?为什么PID 1的进程是
/sbin/init
而lsof -p 1 | grep txt
return/lib/systemd/systemd
?
/sbin/init
是一个符号 link 到 /lib/systemd/systemd
看看stat /sbin/init
或readlink /sbin/init
这就是他们所说的 systemd "running as /sbin/init"。 systemd 二进制文件被 link 编辑为 /sbin/init
并以 link 名称启动。
更新
进一步解释 ps
和 lsof
输出之间的区别:ps
显示启动进程的命令,而 lsof
显示哪些文件进程已打开。
当 systemd 启动时,它被 /sbin/init noibrs splash
调用,文件系统将 link 解析为文件 /lib/systemd/systemd
,然后从磁盘读取并执行。