Mis scripts cdist-deploy-to y cdist-mass-deploy (desde cdist configuración de administración) se ejecutan de forma interactiva (es decir, son llamados por un usuario).Cómo matar a todos los hijos del shell actual en la interrupción?
Estos scripts llaman un montón de guiones, que a su vez llama a algunos scripts:
cdist-mass-deploy ...
cdist-deploy-to ...
cdist-explorer-run-global ...
cdist-dir ....
Lo que quiero es para salir/matar a todos los scripts, tan pronto como cdist masa de implementar o bien se detuvo por control C (SIGINT) o asesinado con SIGTERM.
cdist-deploy-to también se puede llamar de forma interactiva y debe mostrar el mismo comportamiento.
El uso de las variantes ps -ef ... y co para descubrir todos los procesos con el ppid parece que podría ser bastante poco práctico. ¡Usando $! no funciona, ya que en los niveles más profundos, los niños no son procesos en segundo plano.
He intentado utilizar el siguiente código:
__cdist_kill_on_interrupt()
{
__cdist_tmp_removal
kill 0
exit 1
}
trap __cdist_kill_on_interrupt INT TERM
Pero esto lleva a los mensajes dados de baja feos, así como a un error de segmentación en las conchas (guión, golpe, zsh) y parece no dejar todo al instante de todos modos:
# cdist-mass-deploy -p ikq04.ethz.ch ikq05.ethz.ch
core: Waiting for cdist-deploy-to jobs to finish
^CTerminated
Terminated
Terminated
Terminated
Segmentation fault
Entonces la pregunta es, cómo salir limpiamente incluyendo todos los niños (sub) de una manera portátil (shell Bourne, no hay soporte CSH necesario)?
+1. Pero estoy un poco preocupado por discutir el infanticidio. – Hyperboreus