ecu*_*ube 24
检查哪个进程作为 PID 1 运行。您可以通过运行ps 1
并滚动到顶部来执行此操作。如果你有一些 systemd 的东西作为 PID 1 运行,那么你已经在运行 systemd。
或者,运行systemctl
以列出正在运行的 systemd 单元。
您可能还想检查 /sbin/init 是什么;file /sbin/init
会告诉你它是一个真正的可执行文件还是一个指向其他包的可执行文件的符号链接。在 systemd 盒子上,例如:
root@boxy / # file /sbin/init
/sbin/init: symbolic link to ../lib/systemd/systemd
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请查看:https : //en.wikipedia.org/wiki/Linux_startup_process
准确查看系统上的内容的另一种方法是键入man init
并查看您最终访问的是哪个程序的手册页。
小智 21
我知道这是一个老问题,但因为我只是问自己同样的问题 - 这是我的 2ct。
ps --no-headers -o comm 1
Run Code Online (Sandbox Code Playgroud)
这将返回systemd
或init
并且在 Linux 发行版和发行版中显得可靠。
file /sbin/init
在模式匹配的帮助下会起作用。的输出ps 1
似乎没有帮助,因为在某些 Linux 发行版上,尽管使用了 systemd,它仍会打印“init”(符号链接)。
$ ps 1
PID TTY STAT TIME COMMAND
1 ? Ss 0:02 /sbin/init
$ file /sbin/init
/sbin/init: symbolic link to /lib/systemd/systemd
Run Code Online (Sandbox Code Playgroud)
$ ps 1
PID TTY STAT TIME COMMAND
1 ? Ss 7:46 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
$ file /sbin/init
/sbin/init: symbolic link to `../lib/systemd/systemd'
Run Code Online (Sandbox Code Playgroud)
$ ps 1
PID TTY STAT TIME COMMAND
1 ? Ss 0:24 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
$ file /sbin/init
/sbin/init: symbolic link to `../usr/lib/systemd/systemd'
Run Code Online (Sandbox Code Playgroud)
$ ps 1
PID TTY STAT TIME COMMAND
1 ? Ss 0:33 /sbin/init showopts
$ /sbin/init: symbolic link to `../usr/lib/systemd/systemd'
Run Code Online (Sandbox Code Playgroud)
int*_*tgr 12
正确的解决方案是检查/run/systemd/system
目录是否存在。
[[ -d /run/systemd/system ]] && echo "using systemd"
Run Code Online (Sandbox Code Playgroud)
该方法由systemd自己的库函数使用sd_booted()
:https://www.freedesktop.org/software/systemd/man/sd_booted.html
归档时间: |
|
查看次数: |
23847 次 |
最近记录: |