Скажите, если процесс находится под управлением systemd, init.d или Upstart

1175
dronus

Можно ли достоверно определить для данного процесса Linux, запущен ли он или все еще контролируется сценарием init.d, Upstart или systemd?

1
Вы должны быть в состоянии отличить его от родительской иерархии. Самый простой способ - использовать системный монитор в виде дерева. В Ubuntu 15.04 я считаю `ksysguard` самым простым в использовании, хотя вы также можете использовать` gnome-system-monitor`. Если в вашем Linux нет этих программ, вы можете использовать `ps -eHl | less` и следовать дереву интересующей вас программы. AFH 8 лет назад 1
Я так не думаю. Глядя на `pstree` в моей системе, кажется, что большинство процессов отделены от своего родителя. В моем сеансе рабочего стола запущено всего несколько процессов, поэтому большинство процессов на самом верхнем уровне должно быть запущено неким init-deamon, я полагаю. dronus 8 лет назад 0
В моем `pstree` показано все, что происходит от` systemd` (PID 1), включая `upstart`, который находится далеко внизу списка. Я получаю то же самое от `ps -eHl`. AFH 8 лет назад 0
Потому что `systemd` имеет PID 1 (самый верхний), который является единственным разрешенным процессом верхнего уровня. Такое поведение systemd часто подвергается критике. Таким образом, любой процесс, освобожденный от его родителя, является партией `systemd`. Если вы используете сценарии Upstart или init.d в системе, свободной от systemd, вы увидите, что большинство процессов находятся чуть ниже init, несмотря на то, что большинство из них были запущены сценариями Upstart или init.d. В вашей системе, использующей systemd, вы увидите любой процесс, выпущенный его родителем ниже systemd, поэтому вы не можете сказать, кто первым запустил этот процесс. dronus 8 лет назад 0
Извините, я не знал об этом поведении. Поскольку большинство процессов 15.04 имеют в качестве прародителя `systemd`, похоже, это соответствует тому, что я прочитал, что` systemd` в основном заменил `upstart 'в 15.04. Кстати, кроме этого, у меня, похоже, есть два процесса верхнего уровня: поскольку я запускаю некоторые процессы KDE, есть также kthreadd (PID 2), также без родительского элемента, но с большим количеством дочерних элементов. AFH 8 лет назад 0

1 ответ на вопрос

1
Siosm

С помощью systemd вы можете узнать, к какой службе systemd принадлежит процесс, просмотрев группу, в которой он находится.

Например:

$ ps -eo pid,comm,cgroup | grep dhclient 6476 dhclient 8:devices:/system.slice NetworkManager.service,1:name=systemd:/system.slice/NetworkManager.service 

скажет вам, что dhclientпроцесс является частью NetworkManager.service, и, таким образом, управляется systemd.

В то время как:

$ ps -eo pid,comm,cgroup | grep firefox 3302 firefox 8:devices:/user.slice,1:name=systemd:/user.slice/user-1000.slice/session-c2.scope 

показывает, что этот процесс Firefox является частью сеанса, запущенного пользователем с UID 1000.

Процессы, запущенные initscripts или заданиями Upstart, неотличимы от других запускаемых вручную фоновых процессов.

Похожие вопросы