A) ¿Hay alguna forma de determinar la unidad systemd que causó la creación de un proceso específico (en mi salida de ejemplo, proceso 2738, el demonio PA)?
Seguro. Puede ejecutar systemctl status <pid>
y systemd le encontrará la unidad que contiene ese PID. Por ejemplo, en mi sistema encuentro un dnsmasq
proceso:
# ps -fe | grep dnsmasq
nobody 18834 1193 0 Aug25 ? 00:00:10 /usr/sbin/dnsmasq ...
¿Quién lo comenzó?
# 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 --...
También tengo un pulseaudio
proceso:
# ps -fe | grep pulseaudio
lars 2948 1 0 Aug25 ? 00:06:20 /usr/bin/pulseaudio --start
Corriendo systemctl status 2948
, veo:
● 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
Esto me dice que pulseaudio
se inició desde mi sesión de inicio de sesión de escritorio, en lugar de explícitamente a través de systemd.
systemctl
tiene una--property
opción para seleccionar qué propiedades de unidad mostrar, pero desafortunadamente esto solo funciona conshow
notstatus
yshow
no con PID. Lo mejor que se me ocurrió es:systemctl status -n0 $PID 2>/dev/null | head -n1 | awk '{print $2}'