J’utilise le programme C suivant pour tester les comportements des signaux sur Solaris 10
:
#include int main(void) { sleep(100); return 0; }
Exécutez-le en ligne de commande:
bash-3.2# ./test
Ensuite, utilisez psig
pour vérifier les comportements de signal du processus de test
:
bash-3.2# psig 11918 11918: ./test HUP default ...... CONT default TTIN default TTOU default ......
Toutes les dispositions de signal sont default
.
Utilisez la commande grep
pour obtenir le processus parent de test
:
root 11918 17894 0 15:28:41 pts/25 0:00 ./test
Ensuite, utilisez psig
pour vérifier les comportements de signal du parent du processus de test
( bash
):
bash-3.2# psig 17894 17894: bash ...... QUIT ignored ...... TTIN ignored TTOU ignored ......
D’après ce que j’ai compris, je pense que bash
devrait appeler fork
pour générer un test
, selon fork , le processus enfant devrait hériter des dispositions du signal.
Pourquoi le programme n’hérite-t-il pas des dispositions de signal de bash
? Merci d’avance!
Le comportement des signaux interceptés n’est pas hérité dans exec()
. Mais le manuel d’ exec
d’OpenGroup dit:
Les signaux définis sur l’action par défaut (SIG_DFL) dans l’image du processus appelant doivent être définis sur l’action par défaut dans la nouvelle image de processus. À l’exception de SIGCHLD, les signaux mis à ignorer (SIG_IGN) par l’image de processus appelante doivent être configurés pour être ignorés par la nouvelle image de processus.
Donc, le comportement de votre signal de processus est tel que bash
définit comme tel avant de l’ exec
; ce qui est raisonnable