在 redhat 上,大多数 systemd 启动的服务都是作为共享对象实现的。为什么会这样呢?
例如:
file /usr/sbin/sshd
file /usr/sbin/squid
file /usr/sbin/crond
file /usr/sbin/rsyslogd
所有这些守护进程的输出是ELF 64-bit LSB shared object, x86-64
。我可以理解为什么systemd
它本身被实现为共享对象。当内核加载它时,用户空间中没有其他共享对象/可执行文件。所以很可能systemd
是直接系统调用而不是经过libc
。
然而,上面列出的守护进程被实现为共享对象而不是可执行文件的原因是什么?