使用流程
查看几个ps
可以检测到systemd
&的各种版本的命令的输出,可以upstart
像这样制作:
暴发户
$ ps -eaf|grep '[u]pstart'
root 492 1 0 Jan02 ? 00:00:00 upstart-udev-bridge --daemon
root 1027 1 0 Jan02 ? 00:00:00 upstart-socket-bridge --daemon
系统的
$ ps -eaf|grep '[s]ystemd'
root 1 0 0 07:27 ? 00:00:03 /usr/lib/systemd/systemd --switched-root --system --deserialize 20
root 343 1 0 07:28 ? 00:00:03 /usr/lib/systemd/systemd-journald
root 367 1 0 07:28 ? 00:00:00 /usr/lib/systemd/systemd-udevd
root 607 1 0 07:28 ? 00:00:00 /usr/lib/systemd/systemd-logind
dbus 615 1 0 07:28 ? 00:00:13 /bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation
注意PID#1的进程名称也可能会揭示正在使用哪个初始化系统。在Fedora 19(使用systemd
,例如:
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 07:27 ? 00:00:03 /usr/lib/systemd/systemd --switched-root --system --deserialize 20
注意不是init
。在带有Upstart的Ubuntu上,它仍然是/sbin/init
。
$ ps -efa|grep init
root 1 0 0 Jan02 ? 00:00:03 /sbin/init
注意:但是请谨慎使用。有没有什么是一成不变的,说在给定的发行版中使用特定的init系统已经拥有systemd
的PID#1。
通用的
$ (ps -eo "ppid,args" 2>/dev/null || echo "ps call error") \
| awk 'NR==1 || $1==1' | less
PPID COMMAND
1 /lib/systemd/systemd-journald
1 /lib/systemd/systemd-udevd
1 /lib/systemd/systemd-timesyncd
查看带有ppid 1的进程(init进程的子进程)。(某些)子进程名称可能指向使用中的init系统。
文件系统
如果询问init
可执行文件,您也可以从中获取一些信息。只需解析--version
输出。例如:
暴发户
$ sudo /sbin/init --version
init (upstart 1.5)
Copyright (C) 2012 Scott James Remnant, Canonical Ltd.
This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE.
系统的
$ type init
init is /usr/sbin/init
注意:init
不在其标准位置的事实有点提示/说明。它始终位于/sbin/init
sysvinit系统上。
系统
$ type init
init is /sbin/init
还有这个:
$ sudo init --version
init: invalid option -- -
Usage: init 0123456SsQqAaBbCcUu
结论
因此,似乎没有任何一种方法可以执行此操作,但是您可以制定一套检查方法,以相当高的信心确定要使用的初始化系统。