J'ai un CD live qui démarre sous Linux et exécute un petit script Bash. Le script recherche et exécute un deuxième programme (qui est généralement un binaire C ++ compilé).
Vous êtes censé pouvoir abandonner le deuxième programme en appuyant sur Ctrl+ C. Ce qui devrait arriver, c'est que le deuxième programme s'arrête et que le script Bash continue d'exécuter le nettoyage. En réalité, l'application principale et le script Bash se terminent. C'est un problème.
J'ai donc utilisé la fonction trap
intégrée pour dire à Bash d'ignorer SIGINT. Et maintenant Ctrl+ Ctermine l'application C ++, mais Bash continue son exécution. Génial.
Oh ouais ... Parfois, la "deuxième application" est un autre script Bash. Et dans ce cas, Ctrl+ Cmaintenant ne fait plus rien du tout .
De toute évidence, ma compréhension du fonctionnement de ces éléments est erronée ... Comment puis-je contrôler quel processus obtient SIGINT lorsque l'utilisateur appuie sur Ctrl+ C? Je veux diriger ce signal vers un seul processus spécifique .
set -m
. C'est un peu plus propre et plus simple que d'utilisersetsid
chaque fois que vous exécutez un enfant.