A) Czy istnieje sposób na określenie systemowej jednostki, która spowodowała utworzenie określonego procesu (w moim przykładowym wyniku, proces 2738, demon PA)?
Pewnie. Możesz uruchomić, systemctl status <pid>
a systemd znajdzie jednostkę, która zawiera ten PID. Na przykład w moim systemie znajduję dnsmasq
proces:
# ps -fe | grep dnsmasq
nobody 18834 1193 0 Aug25 ? 00:00:10 /usr/sbin/dnsmasq ...
Kto to zaczął?
# 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 --...
Mam również pulseaudio
proces:
# ps -fe | grep pulseaudio
lars 2948 1 0 Aug25 ? 00:06:20 /usr/bin/pulseaudio --start
Biegam systemctl status 2948
, widzę:
● 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
To mówi mi, że pulseaudio
zaczęło się od mojej sesji logowania na pulpicie, zamiast jawnie przez systemd.
systemctl
ma--property
opcję wyboru właściwości jednostki do wyświetlenia, ale niestety działa to tylko zshow
niestatus
ishow
nie działa z PID. Najlepsze, co mogłem wymyślić, to:systemctl status -n0 $PID 2>/dev/null | head -n1 | awk '{print $2}'
ps -o unit
odpowiedź: Lukáš. Zakładając, że masz nowoczesny system i działa, to piękna rzecz.Przy okazji możesz poprosić ps o pokazanie odpowiedniej jednostki systemowej.
źródło
man ps
mówi „jeśli wsparcie systemowe zostało uwzględnione”. Zakładam więc, że to zależy od systemu.ps -C CMD
opcją, npps -o pid,args,unit -C pulseaudio
.Uwaga: proces mający nadrzędny identyfikator PPID 1 nie oznacza, że został utworzony przez systemd. Każdy proces, który traci swój proces nadrzędny, jest automatycznie ponownie przypisywany do rodzica 1.
Możesz zobaczyć hierarchię systemowych procesów za pomocą
który pokazuje mi między innymi (edytowane):
źródło