web-dev-qa-db-ja.com

「ps」を使用したinitプロセス名の一貫性のない出力

私は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と表示されます。

5
Cod3Citrus
                        GRUB(GRand Unified Bootloader)
                                       |                                                          
                                       |
                                       |                                                  
                                       V
                                     Kernel
                                       |
                                Hardware check
                                       |
                            -----------------------
                            |init processes start |
                            -----------------------
                                      /|\
                                     / | \
                            SysVinit   |  systemd
                        init scripts   |
                                    Upstart

上記のdiagramで説明してみましょう。現在、UbuntuではSysVinitで始まり、Upstart、最後にSystemdで始まります。これらはそれぞれ、handleinitprocessを処理しますすべてを開始します一般に。

現在、Ubuntuは徐々にUpstartからSystemdに移行しており、Ubuntu Xenialの現在のinitコントローラーです。 initプロセスはすべてを開始します(カーネルはinitとは無関係の独自のプロセスを持っているため、ほとんどの場合)が、initプロセスを処理または制御するのは、Ubuntuのバージョンに応じてSysVinitUpstart、またはSystemdです。あなたの場合、それは新しいSystemdです。ただし、initctlserviceなどのコマンドがまだ再生される古いシステムの残りも表示されることを忘れないでください。

そのため、初期のシステム機能またはサービスを起動して実行するために、新しい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が表示される理由がわかります。 SystemdPID 1 as /sbin/initで実行されます。

ソース:

man ps

https://wiki.ubuntu.com/SystemdForUpstartUsers

2
George Udosen

Ubuntu 16.04の場合、デフォルトのinitsystemdです

~$ ls -l /sbin/init
lrwxrwxrwx 1 root root 20 Oct  3 20:44 /sbin/init -> /lib/systemd/systemd

systemdは実際に実行されているものです。 -Fオプションは、psを起動するために使用される正確なコマンドライン(引数を含む)を出力します。

2
user.dz