Я нахожусь на Ubuntu 16.04 и следую вдоль "Запуска и Остановки" сервисной главы Библии Linux (9-й выпуск). Я пытаюсь найти, какого 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
Это говорит systemd
для PID1 после выполнения первой команды, но /sbin/init
для PID1 после выполнения второй команды.
Для 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
, печатают точную командную строку (включая аргументы), раньше запускал его.
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. 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. Примите во внимание TIME:00:00:02, который является тем же для обоих systemd
и /sbin/init
в обеих формах ps
.
Посмотрите на эту страницу, и Вы будете видеть почему /sbin/init
обнаруживается когда -F
опция используется. Systemd
выполнения с PID 1 as /sbin/init
.
Источник:
man ps