pkill no mata procesos más allá de los descendientes inmediatos de un proceso

pkill no mata procesos más allá de los descendientes inmediatos de un proceso

Quiero matar una cadena de proceso, por ejemplo.

PID  PPID
100  XXX
101  100
102  101

Cuando uso pkill -P 100PID, 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

pkillestá 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 pkillni FreeBSD tienen la opción de recorrer el árbol de procesos. Puede llamar pstree -ly 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/filepara 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.

información relacionada