Несоответствующий вывод для имени процесса инициализации с использованием 'ps'

5

Я на Ubuntu 16.04, и я следую за главой службы «Запуск и остановка» в Библии Linux (9-е издание). Я пытаюсь найти, какой тип демона init у меня есть ( init или systemd ), который требует, чтобы я нашел, какой процесс имеет PID из 1. Однако я получаю 2 разных результата в зависимости от того, как я запускаю команду ...

[email protected]:~$ ps -p1
  PID TTY          TIME CMD
    1 ?        00:00:29 systemd
[email protected]:~$ 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

Он говорит systemd для PID1 после запуска первой команды, но /sbin/init для PID1 после запуска второй команды.

    
задан Cod3Citrus 16.03.2017 в 22:51
источник

2 ответа

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

Позвольте мне попытаться объяснить диаграмму выше. Теперь в Ubuntu это началось с SysVinit , затем Upstart и, наконец, Systemd . Каждый из них будет обрабатывать процесс init , который начинает все вещи Linux и Ubuntu в целом.

Теперь Ubuntu постепенно отходит от Upstart и в Systemd и является текущим контроллером init на Ubuntu Xenial. Процесс init запускает все вещи (или большинство из них, поскольку у ядра есть свой собственный процесс, не связанный с init ), но то, что обрабатывает или контролирует процесс init , либо SysVinit , Upstart , либо Systemd в зависимости от вашей версии Ubuntu. В вашем случае это новый 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

Затем, чтобы увидеть аргументы , переданные этой команде:

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 . То, что вы видите, - это основной процесс init , выполняемый systemd на Ubuntu Xenial. Обратите внимание на TIME : 00: 00: 02, что одинаково для systemd и /sbin/init в обеих формах ps .

Пожалуйста, просмотрите страницу , и вы увидите, почему /sbin/init появляется, когда используется опция -F . Systemd работает с PID 1 as /sbin/init .

Источник:

man ps

Ссылка

    
ответ дан George Udosen 16.03.2017 в 23:12
2

Для 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 распечатывает точную командную строку (включая аргументы), используемую для ее запуска.

    
ответ дан user.dz 17.03.2017 в 10:59