A) Gibt es eine Möglichkeit, die Systemeinheit zu bestimmen, die die Erstellung eines bestimmten Prozesses verursacht hat (in meiner Beispielausgabe Prozess 2738, der PA-Dämon)?
Sicher. Sie können ausführen systemctl status <pid>
und systemd findet die Einheit, die diese PID enthält. Zum Beispiel finde ich auf meinem System einen dnsmasq
Prozess:
# ps -fe | grep dnsmasq
nobody 18834 1193 0 Aug25 ? 00:00:10 /usr/sbin/dnsmasq ...
Wer hat damit angefangen?
# systemctl status 18834
● NetworkManager.service - Network Manager
Loaded: loaded (/usr/lib/systemd/system/NetworkManager.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2015-08-25 11:07:40 EDT; 1 day 21h ago
Main PID: 1193 (NetworkManager)
Memory: 1.1M
CGroup: /system.slice/NetworkManager.service
├─ 1193 /usr/sbin/NetworkManager --no-daemon
├─ 1337 /sbin/dhclient -d -q -sf /usr/libexec/nm-dhcp-helper -pf /var/run/dhclient-wlp3s0....
├─18682 /usr/libexec/nm-openvpn-service
├─18792 /usr/sbin/openvpn --remote ovpn-phx2.redhat.com 443 tcp --nobind --dev redhat --de...
└─18834 /usr/sbin/dnsmasq --no-resolv --keep-in-foreground --no-hosts --bind-interfaces --...
Ich habe auch einen pulseaudio
Prozess:
# ps -fe | grep pulseaudio
lars 2948 1 0 Aug25 ? 00:06:20 /usr/bin/pulseaudio --start
Laufen systemctl status 2948
sehe ich:
● session-3.scope - Session 3 of user lars
Loaded: loaded (/run/systemd/system/session-3.scope; static; vendor preset: disabled)
Drop-In: /run/systemd/system/session-3.scope.d
└─50-After-systemd-logind\x2eservice.conf, 50-After-systemd-user-sessions\x2eservice.conf, 50-Description.conf, 50-SendSIGHUP.conf, 50-Slice.conf
Active: active (running) since Tue 2015-08-25 11:09:23 EDT; 1 day 21h ago
CGroup: /user.slice/user-1000.slice/session-3.scope
Dies sagt mir, dass der pulseaudio
Start von meiner Desktop-Anmeldesitzung statt explizit über systemd erfolgte.
systemctl
Es gibt eine--property
Option zum Auswählen der anzuzeigenden Einheiteneigenschaften. Leider funktioniert dies nur mit "show
Nicht"status
undshow
nicht mit "PIDs". Das Beste, was ich mir einfallen lassen konnte, war:systemctl status -n0 $PID 2>/dev/null | head -n1 | awk '{print $2}'
ps -o unit
Antwort von Lukáš. Vorausgesetzt, Sie arbeiten auf einem modernen System und es funktioniert, ist es eine schöne Sache.Übrigens können Sie ps bitten, die entsprechende Systemeinheit anzuzeigen.
quelle
man ps
dass "wenn systemd-Unterstützung enthalten ist". Ich gehe also davon aus, dass es systemabhängig ist.ps -C CMD
Option, zps -o pid,args,unit -C pulseaudio
.Beachten Sie, dass ein Prozess mit einer übergeordneten PPID von 1 nicht bedeutet, dass er von systemd erstellt wurde. Jedem Prozess, der seinen übergeordneten Prozess verliert, wird automatisch der übergeordnete Prozess 1 zugewiesen.
Sie können die Hierarchie der systemd Prozesse mit sehen
das zeigt für mich unter anderem (bearbeitet):
quelle