linux - secar - ¿Cómo puedo matar un árbol de proceso completo con Perl?
como secar un arbol de mango (3)
Si puede vivir eliminando un grupo de procesos, puede usar lo siguiente:
kill -$signum, $pgid;
donde $signum
es el número de señal, y $pgid
es la identificación del grupo de proceso. Sin embargo, los números de señal no son muy portátiles, en cuyo caso puede (en algunas plataformas, leer perlfunc
para perlfunc
una explicación) hacer lo siguiente (para enviar SIGTERM
, por ejemplo):
kill ''TERM'', -$pgid;
¿Cuál es la mejor forma de eliminar un proceso y todos sus procesos secundarios de un script de Perl? Debería ejecutarse al menos bajo Linux y Solaris, y no requerir la instalación de ningún paquete adicional.
Mi suposición sería obtener una lista de todos los procesos y sus padres analizando los archivos en / proc o analizando el resultado de ps
(ninguno de los cuales parece portátil entre Linux y Solaris); y luego matar todos los procesos en el árbol (que parece propenso a las condiciones de carrera).
Podría vivir con las condiciones de carrera en este caso particular, pero ¿cómo puedo obtener la lista de procesos de forma portátil?
CPAN tiene una respuesta. Sí, sé que no quería instalar módulos adicionales, pero al menos puede ver la implementación y ver qué están haciendo ...
Me adapté y pirateé "rkill" para hacer el trabajo, fue fácil.
https://gitlab.com/pslist/pslist/blob/master/pslist
Esto es parte del paquete "pslist" en eg ubuntu.