Teniendo en cuenta este programa hack.c:bash trap of TERM - ¿Qué estoy haciendo mal?
#include <stdio.h>
main()
{
int i=0;
for(i=0; i<100; i++) {
printf("%d\n", i);
sleep(5);
}
}
y esta escritura del golpe hack.sh:
#!/bin/bash
./hack
Si me quedo hack.sh, dos procesos se crean - uno para bash, uno para el Tarea C Si se envía una señal TERM al proceso bash, el proceso C queda ileso.
Supongamos que el bash original se inició desde un programa Java utilizando Runtime.exec(), por lo que el único control que tengo sobre él es Process.destroy() (¿qué envía TERM al proceso bash)? Supongamos que yo quiero el proceso C para morir junto con el bash que lo lanzó?
He estado tratando de cosas como esta en bash:
#!/bin/bash
trap "kill -TERM -$$; exit" TERM
./hack
es decir, una cláusula trampa que atrapa la señal TERM y vuelve a difundir a todo el grupo de procesos. Esto no funciona para mí: un proceso bash con esa cláusula trap en él ignora señales TERM.
¿Qué me falta aquí?
La página man de bash dice: Si bash está esperando que se complete un comando y recibe una señal para la cual se ha establecido una trampa, la trampa no se ejecutará hasta que el comando finalice. – tangens
¿Ha intentado usar 'exec' en lugar de mantener vivo el proceso de shell? –
Tienes razón, tangens. Mi única excusa es que el texto está en la sección SEÑALES, muy por encima de la documentación de la trampa. ¡Gracias! –