Respuestas:
Utilizar ps -o ppid=
ps -o ppid= 2072retornos 2061, que puede usar fácilmente en un script, etc., ps -o ppid= -C fooproporciona el PPID del proceso con el comando foo. También puede utilizar la antigua usanza ps | grep: ps -eo ppid,comm | grep '[f]oo'.ps -f 2072devoluciones
UID PID PPID C TIEMPO TTY ESTADO TIEMPO CMD izx 2072 2061 0 07:16? S 0:00 / usr / lib / pulseaudio / pulse / gconf-helper
pstreerelación es pstree -s -p 2072:
init (1) ───pulseaudio (2061) ───gconf-helper (2072)
ppid= pero antes del pid parece ser necesario. Obtuve resultados diferentes si lo omití.
echo $PPID
si necesita el comando de este padre pid:
cat /proc/$PPID/comm
si necesita la línea de comando completa (con todas las opciones):
cat /proc/$PPID/cmdline
$PPID está definido por el shell, es el PID del proceso padre/proc/, tienes algunos directorios con el PID de cada proceso. Entonces, si usted cat /proc/$PPID/comm, se hace eco del nombre del comando del PIDPPIDse define como parte del estándar POSIX, por lo que cualquier shell compatible con POSIX debe configurarlo adecuadamente. Ver pubs.opengroup.org/onlinepubs/9699919799/utilities/…
pstreepor nombre de comandoUtilizando pstreepuede buscar por el nombre del proceso secundario y obtener el ID de proceso (PID) junto con los padres, abuelos y cualquier elemento secundario del proceso secundario:
$ pstree -hp | grep sleep
|-cron(763)---cron(795)---sh(839)---display-auto-br(841)---sleep(8414)
En este caso sleepes el comando hijo y su PID es 8414. Su identificación principal es 841 y se llama display-auto-brightness. El abuelo es un shell ( sh) con un ID de proceso de 839. El bisabuelo tiene cronuna identificación de proceso de 795. El tatarabuelo también crontiene un ID de proceso 763.
Si desea buscar por ID de proceso en sleeplugar de nombre, puede usar:
$ pstree -hp | grep 14653
|-cron(763)---cron(795)---sh(839)---display-auto-br(841)---sleep(14653)
Observe que la sleepID del proceso cambió a 14653. El padre (PID 841) duerme durante 1 minuto, se despierta por una fracción de segundo y luego inicia un nuevo sleepcomando que obtiene una nueva ID de proceso. Esta es otra razón por la cual buscar sleepes más fácil que buscar por ID de proceso.
Este código fue tomado de: Ajusta automáticamente el brillo de la pantalla según el amanecer y el atardecer y se adapta a esta pregunta.
Para ver una cadena anidada hasta el proceso de inicio, use el PID en lugar del nombre:
$ pstree -aps 8541
systemd,1 splash fastboot kaslr
└─cron,763 -f
└─cron,795 -f
└─sh,839 -c /usr/local/bin/display-auto-brightness
└─display-auto-br,841 /usr/local/bin/display-auto-brightness
└─sleep,8541 60
Nota: Ha pasado otro minuto y el comando de suspensión obtiene un nuevo PID (8541).
807o crony la misma línea se volvería a acortar, así como a más niños si se genera. Pero la pregunta era sobre encontrar al padre, no a todos los hijos.
1. No creo que puedas matar el PID 1.
ps -efj También se puede utilizar para lo mismo.
Por ejemplo,
> ps -efj | head
UID PID PPID PGID SID C STIME TTY TIME CMD
root 1 0 1 1 0 Jul01 ? 00:00:13 /sbin/init splash
root 2 0 0 0 0 Jul01 ? 00:00:00 [kthreadd]
root 3 2 0 0 0 Jul01 ? 00:00:02 [ksoftirqd/0]
root 5 2 0 0 0 Jul01 ? 00:00:00 [kworker/0:0H]
root 7 2 0 0 0 Jul01 ? 00:06:44 [rcu_sched]
root 8 2 0 0 0 Jul01 ? 00:00:00 [rcu_bh]
root 9 2 0 0 0 Jul01 ? 00:00:00 [migration/0]
root 10 2 0 0 0 Jul01 ? 00:00:08 [watchdog/0]
root 11 2 0 0 0 Jul01 ? 00:00:08 [watchdog/1]
ps -o args ...en los resultados, pero eso tiene un poco de olor.