Sagen Sie, ob ein Prozess unter systemd, init.d oder Upstart gesteuert wird

1405
dronus

Kann man für einen bestimmten Linux-Prozess zuverlässig feststellen, ob er gestartet wurde oder noch von einem init.d-Skript (Upstart oder systemd) überwacht wird?

1
Sie sollten aus der übergeordneten Hierarchie unterscheiden können. Am einfachsten ist es, einen Systemmonitor in der Baumansicht zu verwenden. Unter Ubuntu 15.04 finde ich `ksysguard 'am einfachsten zu verwenden, obwohl Sie auch' gnome-system-monitor 'verwenden können. Wenn Ihr Linux diese Programme nicht zur Verfügung hat, können Sie "ps -eHl | less" verwenden und dem Baum des gewünschten Programms folgen. AFH vor 9 Jahren 1
Ich glaube nicht Betrachtet man "pstree" in meinem System, scheinen sich die meisten Prozesse von ihren Eltern getrennt zu haben. Es gibt nur wenige Prozesse, die von meiner Desktopsitzung gestartet wurden, daher müssen die meisten Prozesse auf der obersten Ebene von einem Init-Deamon gestartet worden sein, denke ich. dronus vor 9 Jahren 0
Mein "pstree" zeigt alles, was von "systemd" (PID 1) herrührt, einschließlich "upstart", was ganz unten auf der Liste steht. Ich bekomme dasselbe von "ps -eHl". AFH vor 9 Jahren 0
Da `systemd` die PID 1 (die oberste) hat, ist dies der einzige erlaubte Prozess auf oberster Ebene. Dieses Verhalten von systemd wird oft kritisiert. Jeder von seinem übergeordneten Prozess freigegebene Prozess wird also von 'systemd' übergeordnet. Wenn Sie Upstart- oder init.d-Skripts auf einem systemd-freien System verwenden, sehen Sie, dass sich die meisten Prozesse nur unter init befinden, obwohl die meisten von ihnen durch Upstart- oder init.d-Skripts gestartet wurden. Auf Ihrem System mit systemd sehen Sie jeden Prozess, der von seinem übergeordneten System unter systemd freigegeben wird. Sie können also nicht feststellen, wer den Prozess auf diese Weise gestartet hat. dronus vor 9 Jahren 0
Sorry, ich wusste nichts über dieses Verhalten. Da die meisten Prozesse am 15.04 "systemd" als Vorläufer haben, scheint dies im Einklang mit dem, was ich gelesen hatte, dass "systemd" in 15.04 meistens "upstart" ersetzte. Übrigens, ich habe anscheinend nur zwei Prozesse auf oberster Ebene: Weil ich einige KDE-Prozesse durchführe, gibt es auch 'kthreadd' (PID 2), ebenfalls ohne Eltern, aber mit vielen Kindern. AFH vor 9 Jahren 0

1 Antwort auf die Frage

1
Siosm

Mit systemd können Sie herausfinden, zu welchem ​​systemd-Service ein Prozess gehört, indem Sie die cgroup betrachten, in der er sich befindet.

Zum Beispiel:

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

wird Ihnen sagen, dass der dhclientProzess Teil von NetworkManager.serviceist und daher von systemd verwaltet wird.

Wohingegen:

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

zeigt an, dass dieser Firefox-Prozess Teil der Sitzung ist, die vom Benutzer mit der UID 1000 gestartet wurde.

Prozesse, die von Initscripts oder Upstart-Jobs gestartet werden, sind nicht von anderen manuell gestarteten Hintergrundprozessen zu unterscheiden.