Donné ce programme hack.c:bash piège de TERM - qu'est-ce que je fais mal?
#include <stdio.h>
main()
{
int i=0;
for(i=0; i<100; i++) {
printf("%d\n", i);
sleep(5);
}
}
et ce script bash hack.sh:
#!/bin/bash
./hack
Si je cours hack.sh, deux processus sont créées - un pour bash, un pour la C tâche. Si un signal TERM est envoyé au processus bash, le processus C est indemne. Maintenant, supposons que le fichier bash d'origine ait été lancé à partir d'un programme Java en utilisant Runtime.exec(), donc le seul contrôle que j'ai par dessus est Process.destroy() (qui envoie TERM au processus bash)? Supposons que je veux le processus C à mourir avec le bash qui l'a lancé?
J'ai essayé des choses comme ça dans bash:
#!/bin/bash
trap "kill -TERM -$$; exit" TERM
./hack
à savoir une clause de piège qui attire le signal TERM et rediffuse à l'ensemble du groupe de processus. Cela ne fonctionne pas pour moi - un processus bash avec cette clause de piège ignore les signaux TERM.
Qu'est-ce qui me manque ici?
La page de manuel de bash indique: Si bash attend une commande pour terminer et reçoit un signal pour lequel un trap a été défini, le trap ne sera pas exécuté jusqu'à ce que la commande soit terminée. – tangens
Avez-vous essayé d'utiliser 'exec' au lieu de garder le processus shell en vie? –
Vous avez raison, tangens. Ma seule excuse est que le texte est dans la section SIGNALS, bien au-dessus de la documentation de piège. Merci! –