即使我使用 systemd,某些进程也是通过 init 启动的

即使我使用 systemd,某些进程也是通过 init 启动的

当我做

ll /proc/1/exe

我明白了

lrwxrwxrwx. 1 root root 0 Oct 16 11:28 /proc/1/exe -> /usr/lib/systemd/systemd

这意味着我正在运行systemd守护进程而不是init

但当我列出

ll /etc/init.d/

我仍然得到一些正在运行的服务init(剥离输出),

-rwxr-xr-x   1 root root  2269 Apr 22  2017 acpid*
-rwxr-xr-x   1 root root  5336 Apr 15  2016 alsa-utils*
-rwxr-xr-x   1 root root  2014 Dec 29  2014 anacron*
-rwxr-xr-x   1 root root  4335 Mar 23  2018 apparmor*
-rwxr-xr-x   1 root root  2802 Jan  3  2018 apport*
-rwxr-xr-x   1 root root  2134 Jul  7  2015 autofs*
-rwxr-xr-x   1 root root  2401 Nov  5  2015 avahi-daemon*
-rwxr-xr-x   1 root root  2968 Mar  2  2016 bluetooth*
-rwxr-xr-x   1 root root  1275 Jan 20  2016 bootmisc.sh*
-rwxr-xr-x   1 root root  2125 Apr 27  2016 brltty*
-rwxr-xr-x   1 root root  1904 Nov 18  2015 cgroupfs-mount*
-rwxr-xr-x   1 root root  3807 Jan 20  2016 checkfs.sh*
-rwxr-xr-x   1 root root  1098 Jan 20  2016 checkroot-bootclean.sh*
-rwxr-xr-x   1 root root  9353 Jan 20  2016 checkroot.sh*
-rwxr-xr-x   1 root root  1232 Aug  9 09:32 console-setup.sh*
-rwxr-xr-x   1 root root  3049 Apr  6  2016 cron*
-rwxr-xr-x   1 root root  2804 Mar 28  2018 cups*
-rwxr-xr-x   1 root root  1961 Feb 14  2016 cups-browsed*
-rwxr-xr-x   1 root root  2813 Dec  2  2015 dbus*
-rw-r--r--   1 root root  1195 Oct  7 06:13 .depend.boot
-rw-r--r--   1 root root  2459 Oct  7 06:13 .depend.start
-rw-r--r--   1 root root  1926 Oct  7 06:13 .depend.stop

当我列出更多服务时,

ll /lib/systemd/system

有人可以告诉我为什么有这么多服务在运行吗init

答案1

systemd在您的系统中运行,并且正在启动所有服务,包括/etc/init.d.

为了与使用传统init(也称为“sysvinit”或“System V init”)的旧系统兼容,systemd 实现了一种机制,通过该机制能够使用传统 init 脚本启动服务。

该兼容层是由systemd-sysv-生成器,它查找旧的 init 脚本并将它们包装到本机 systemd 服务单元中。 (例如,它将找到并为其/etc/init.d/avahi-daemon创建一个包装器,其中有一个运行的包装器,并且类似地用于停止和重新加载操作,模拟传统初始化脚本的工作方式。)/run/systemd/system/avahi-daemon.serviceExecStart=/etc/init.d/avahi-daemon start

一些发行版还提供可执行文件的包装器,例如servicechkconfig提供与 sysvinit 的进一步兼容性。

为了检查为 systemd 定义了哪些服务,您可以使用诸如systemctl(显示所有单元文件)、systemctl list-units(显示内存中的活动单元) 或 之类的命令,您可以在旧版 init 服务之一上使用这些命令,因为它存在于 systemd 中通过包装纸。systemctl status service

答案2

这些不是正在运行的服务,而是可执行脚本。

相关内容