Listar ID de procesos secundarios
Quiero obtener una lista de todos los ID de procesos secundarios para un ID de proceso principal determinado ( 6330 qemu) para usar en un bashscript.
Puedo verlos en htop, por ejemplo:
Los principales resultados de búsqueda incluyen:
# pgrep -P 6330
(no output)
# ps --ppid 6330
PID TTY TIME CMD
# pstree -p 6330
qemu(6330)-+-{qemu}(6332)
|-{qemu}(6333)
|-{qemu}(6340)
|-{qemu}(6342)
|-{qemu}(6343)
`-{qemu}(6344)
... la salida de estos es la misma si se ejecuta como rooto como el usuario propietario qemu.
La pstreesalida es viable como último recurso, pero preferiría no analizarla si puedo evitarlo.
Además ... ps aux | grep 6332y pgrep 6332no produce nada ... así que eso también es un poco desconcertante.
Esto debería ser fácil, ¿verdad?
Aprecio tu tiempo.
Respuestas
Quiero obtener una lista de todos los ID de procesos secundarios para un ID de proceso principal determinado (
6330 qemu) para usar en unbashscript.
La solución a este problema exacto es pgrep -P 6330, pero el resto de la pregunta sugiere que tal vez los "ID de procesos secundarios" no sean lo que realmente desea.
Usó pgrep -P 6330y la salida estaba vacía porque no había procesos secundarios. Qué htopy pstreedemostró que eran hilos . Entonces, tal vez realmente quieras ID de hilo.
Vea estos:
¿Por qué se enumeran muchos procesos bajo el mismo título en htop?
htopmuestra subprocesos individuales como procesos separados de forma predeterminada, de manera similar a cómo lops -ALharía. Si presiona mayúsculasH, cambiará para mostrar solo los procesos principales (al presionarlo nuevamente, se regresa).man 1 pstree:
Los subprocesos secundarios de un proceso se encuentran debajo del proceso principal y se muestran con el nombre del proceso entre llaves […]
¿Se implementan los hilos como procesos en Linux?
Linux solía asignar diferentes PID a subprocesos. Dado que los hilos de un proceso de Linux 2.4 comparten su PID; esto es para satisfacer POSIX. La terminología se volvió más complicada, "PID" es algo ambiguo. De una respuesta relevante sobre SO :
Lo primero y más importante a tener en cuenta es que "PID" significa cosas diferentes en el espacio del kernel y el espacio del usuario. Lo que el núcleo llama PID son en realidad identificadores de subprocesos a nivel de núcleo (a menudo llamados TID), […]. Cada hilo del sistema, ya sea en el mismo proceso o en uno diferente, tiene un TID único (o "PID" en la terminología del kernel).
Lo que se considera un PID en el sentido POSIX de "proceso", por otro lado, se denomina "ID de grupo de subprocesos" o "TGID" en el kernel. Cada proceso consta de uno o más subprocesos (procesos del kernel), cada uno con su propio TID (kernel PID), pero todos comparten el mismo TGID, que es igual al TID (kernel PID) del subproceso inicial en el que se ejecuta main.
Cuando le
topmuestra subprocesos, muestra TID (kernel PID), no PID (kernel TGID), y es por eso que cada subproceso tiene uno separado.La última oración se aplica a
htopopstreetambién.
Si todavía desea conseguir estas diferentes identificaciones ( 6332, 6333, ...) para utilizar en un script de shell, hacen referencia a esta:
ps -o lwp= -Lp 6330
El comando no es portátil, puede funcionar o no en su sistema operativo. Si funciona, es posible que desee excluir el hilo principal:
ps -o lwp= -Lp 6330 | grep -v '^ *6330$'
( <space>*porque ps(al menos mi ps) agrega espacios iniciales).