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}'
ps -o unit
respuesta de Lukáš. Asumiendo que estás en un sistema moderno y funciona, es algo hermoso.Por cierto, puede pedirle a ps que muestre la unidad systemd correspondiente.
fuente
man ps
dice "si se ha incluido el soporte de systemd". Así que supongo que depende del sistema.ps -C CMD
opción, por ejemplo,ps -o pid,args,unit -C pulseaudio
.Tenga en cuenta que un proceso que tiene un PPID primario de 1 no significa que fue creado por systemd. Cualquier proceso que pierde su proceso padre se reasigna automáticamente al padre 1.
Puede ver la jerarquía de procesos systemd con
que muestra para mí entre otras cosas (editado):
fuente