私はUbuntu 16.04を使用しており、Linux聖書(第9版)の「Starting and Stopping」サービスの章に続いています。どのタイプのinitデーモン(init
またはsystemd
)を探しているので、PIDが1のプロセスを見つける必要があります。しかし、コマンドの実行方法に応じて2つの異なる結果が得られます。 ...
webmaster@my-site:~$ ps -p1
PID TTY TIME CMD
1 ? 00:00:29 systemd
webmaster@my-site:~$ ps -F -p1
UID PID PPID C SZ RSS PSR STIME TTY TIME CMD
root 1 0 0 9420 5336 0 Feb23 ? 00:00:29 /sbin/init
最初のコマンドを実行した後のPID1にはsystemd
と表示されますが、2番目のコマンドの実行後はPID1に/sbin/init
と表示されます。
GRUB(GRand Unified Bootloader)
|
|
|
V
Kernel
|
Hardware check
|
-----------------------
|init processes start |
-----------------------
/|\
/ | \
SysVinit | systemd
init scripts |
Upstart
上記のdiagramで説明してみましょう。現在、UbuntuではSysVinit
で始まり、Upstart
、最後にSystemd
で始まります。これらはそれぞれ、handleinit
processを処理しますすべてを開始します一般に。
現在、Ubuntuは徐々にUpstart
からSystemd
に移行しており、Ubuntu Xenialの現在のinit
コントローラーです。 init
プロセスはすべてを開始します(カーネルはinit
とは無関係の独自のプロセスを持っているため、ほとんどの場合)が、init
プロセスを処理または制御するのは、Ubuntuのバージョンに応じてSysVinit
、Upstart
、またはSystemd
です。あなたの場合、それは新しいSystemd
です。ただし、initctl
、service
などのコマンドがまだ再生される古いシステムの残りも表示されることを忘れないでください。
そのため、初期のシステム機能またはサービスを起動して実行するために、新しいUbuntuはsystemd
を古いもののinit daemon
の代わりに使用するようになりました。ただし、後方互換性のため、init
は引き続きバックグラウンドで実行されます。
man ps
によれば、-F
フラグを渡すと、command arguments
が出力されます。したがって、この場合、コマンドは次のように表示されます。
ps -p 1
#Result
PID TTY TIME CMD
1 ? 00:00:02 systemd
次に、そのコマンドに渡されたargumentsを見るには:
ps -F -p 1
#Result
UID PID PPID C SZ RSS PSR STIME TTY TIME CMD
root 1 0 0 46414 6336 1 05:48 ? 00:00:02 /sbin/init splash
ps -p 1
==> command
、およびps -F -p 1
==> arguments passed
です。長いストーリー-F
余分な完全な形式。ps -p 1
またはsystemd
コマンドに関連する詳細情報が表示されます。表示されるのは、Ubuntu Xenialでinit
によって実行される、基になるsystemd
プロセスです。 TIME:00:00:02に注意してください。これは、systemd
の両方の形式のps
と/sbin/init
の両方で同じです。 。
これをご覧ください page と/sbin/init
オプションが使用されたときに-F
が表示される理由がわかります。 Systemd
はPID 1 as /sbin/init
で実行されます。
ソース:
man ps
Ubuntu 16.04の場合、デフォルトのinit
はsystemd
です
~$ ls -l /sbin/init
lrwxrwxrwx 1 root root 20 Oct 3 20:44 /sbin/init -> /lib/systemd/systemd
systemd
は実際に実行されているものです。 -F
オプションは、ps
を起動するために使用される正確なコマンドライン(引数を含む)を出力します。