Dans le cas général, lorsqu'un processus se termine, cela se passe très simplement :
- ses processus fils sont reparentés à init
- ils continuent leur vie, et lorsqu'ils meurent init effectue le waitpid()
Mais dans ton cas, c'est un peu plus complexe, à cause du tty. Lorsque le shell se termine :
- comme le shell "controllait" le tty (controlling process, session leader), le noyau (le driver tty) envoie un SIGHUP à tous les process dans le foreground group. C'est ce signal qui provoque la terminaison des processus. Mais ce signal peut être ignoré, par exemple avec sighup, ou on peut carrément lancer les process dans une nouvelle session et sans controlling tty avec setsid.
Notes :
Dans tous les cas, ce n'est pas le shell lui-même qui tue les processus fils.
C'est en fait bien plus complexe sous POSIX, mais les process groups, sessions, etc…
# SIGHUP
Posté par neologix . En réponse au message Kill d'un processus et processus fils. Évalué à 6.
Dans le cas général, lorsqu'un processus se termine, cela se passe très simplement :
- ses processus fils sont reparentés à init
- ils continuent leur vie, et lorsqu'ils meurent init effectue le waitpid()
Mais dans ton cas, c'est un peu plus complexe, à cause du tty. Lorsque le shell se termine :
- comme le shell "controllait" le tty (controlling process, session leader), le noyau (le driver tty) envoie un SIGHUP à tous les process dans le foreground group. C'est ce signal qui provoque la terminaison des processus. Mais ce signal peut être ignoré, par exemple avec sighup, ou on peut carrément lancer les process dans une nouvelle session et sans controlling tty avec setsid.
Notes :
Dans tous les cas, ce n'est pas le shell lui-même qui tue les processus fils.
C'est en fait bien plus complexe sous POSIX, mais les process groups, sessions, etc…
Pour le minimum à savoir, tu peux voir ici : http://www.win.tue.nl/~aeb/linux/lk/lk-10.html