PID 1 として実行されているプロセスを確認します。これを行うには、ps 1
を実行します。 そして一番上までスクロール。 systemd が PID 1 として実行されている場合は、systemd が実行されています。
または、systemctl
を実行します 実行中の systemd ユニットを一覧表示します。
/sbin/init が何であるかを確認することもできます。 file /sbin/init
それが実際の実行可能ファイルなのか、それとも他のパッケージの実行可能ファイルへのシンボリック リンクなのかがわかります。たとえば、systemd ボックスの場合:
[email protected] / # file /sbin/init
/sbin/init: symbolic link to ../lib/systemd/systemd
詳細については、こちらをご覧ください:https://en.wikipedia.org/wiki/Linux_startup_process
システムにあるものを正確に確認するもう 1 つの方法は、man init
と入力することです。 そして、どのプログラムの man ページにたどり着くかを確認します。
これが古い質問であることは承知していますが、同じ質問を自問していたので、これが私の 2 番目の質問です。
思いついた最善の解決策
ps --no-headers -o comm 1
これは systemd
のいずれかを返します または init
Linux ディストリビューションとリリース全体で信頼性が高いようです。
file /sbin/init
パターンマッチングの助けを借りて動作します。 ps 1
の出力 一部の Linux ディストリビューションでは、systemd が使用されているにもかかわらず「init」(シンボリック リンク) が出力されるため、役に立たないようです。
Debian 8
$ ps 1
PID TTY STAT TIME COMMAND
1 ? Ss 0:02 /sbin/init
$ file /sbin/init
/sbin/init: symbolic link to /lib/systemd/systemd
RHEL 7
$ 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'
SLES 12
$ 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'
openSUSE 13.1
$ ps 1
PID TTY STAT TIME COMMAND
1 ? Ss 0:33 /sbin/init showopts
$ /sbin/init: symbolic link to `../usr/lib/systemd/systemd'