¿Cuál es la mejor manera de eliminar un proceso y todos sus procesos secundarios de un script Perl? Debería ejecutarse al menos bajo Linux y Solaris, y no requerir la instalación de ningún paquete adicional.¿Cómo puedo matar un árbol de procesos completo con Perl?
Supongo que obtendría 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?
¿Qué procesos pertenecen a un grupo de procesos? Estoy usando IPC :: Open3 para iniciar un proceso (que en Solaris ejecuta el comando dentro de sh -c), y quiero eliminar el sh y mi comando real y todos los demás subprocesos. ¿Qué sucede si el grupo de procesos contiene incluso el intérprete de Perl? ¿No puede pasar eso? – oliver
Mientras no use SIGKILL, puede hacer que su programa Perl ignore la señal que está enviando. Lea perlipc (busque "grupo de proceso"). –