Quiero matar una cadena de proceso, por ejemplo.
PID PPID
100 XXX
101 100
102 101
Cuando uso pkill -P 100
PID, 100 y 101 mueren como se esperaba, pero se le da 102 como PPID.
¿Cómo puedo obligar a pkill a seguir matando procesos encadenados más allá de los descendientes inmediatos de un proceso?
Respuesta1
pkill
está haciendo exactamente lo que usted le dijo que hiciera: eliminó los procesos cuyo padre es 100. No los procesos cuyo padre es 100.
Ni Linux pkill
ni FreeBSD tienen la opción de recorrer el árbol de procesos. Puede llamar pstree -l
y analizar su salida.
Tenga en cuenta que si A bifurca a B, B bifurca a C y luego B muere, no queda ninguna relación padre-hijo que pueda conectar A y C.
Puede haber una manera de eliminar todos estos procesos, pero tenga cuidado porque podría superarlos.
Si le pasa una ID de proceso negativa kill
, eso mata todogrupo de proceso. Esto es atómico, por lo que funciona incluso si uno de los procesos se bifurca justo cuando lo estás ejecutando kill
. Esto solo mata los procesos que no se han colocado en su propio grupo, y también mata al proceso principal y a otros si están en el mismo grupo de procesos. Ejecute ps -o pgid …
para ver el ID del grupo de procesos de los procesos.
Si todos los procesos que desea eliminar tienen un archivo en particular abierto, puede utilizar fuser -k /some/file
para eliminartodolos procesos que tienen este archivo abierto.
Otra opción en Linux esejecutar los procesos en su propio espacio de nombres PID. Luego puede eliminar todo el espacio de nombres eliminando el pseudo-PGID -1 desde dentro del espacio de nombres.