D'après ce que je comprends, SIGKILL ne peut pas être attrapé. Cela impliquerait qu'un processus n'a pas le temps de tuer ses enfants avant que le système d'exploitation ne le détruise. Cela peut être démontré avec un script shell.
#! /bin/bash
trap : SIGTERM SIGINT SIGKILL # SIGKILL is pointless.
mplayer video.avi
Le tuer avec SIGKILL laisse mplayer en marche.
$ kill -9 $pid
Mais lorsque vous utilisez un émulateur de terminal (xterm, Terminal, ...), les enfants sont tués avec lui. Comment est-ce possible?
$ mplayer
Et tuez-le:
$ kill -9 $terminal_pid
Et mplayer descend avec le vaisseau. Les émulateurs de terminaux attrapent-ils SIGKILL d'une manière ou d'une autre?
la source
disown
lequel est très utile.Votre question se répond d'elle-même, cela se produit car ces processus s'exécutent en tant qu'enfants sous l'émulateur de terminal. Vous supprimez donc l'émulateur de terminal et, ce faisant, supprimez tous les processus enfants (car les enfants s'exécutent sous le même groupe de processus que l'émulateur de terminal de contrôle).
Voir, par exemple, ce qui suit:
Tous ces processus s'exécutent sous les processus `` xfce4-terminal '', donc si je tue ce processus, il tuera automatiquement tous les processus enfants du groupe de processus ... de la même manière, par exemple, que quitter la fenêtre de l'émulateur de terminal serait nécessairement tuer ma connexion SSH.
Des programmes tels que les shells créent de nouveaux groupes de processus, plaçant généralement les processus enfants associés dans un groupe. Chaque travail est un groupe de processus. En dehors du noyau, un shell manipule un travail en envoyant des signaux au groupe de processus du travail avec l'appel système killpg, qui délivre un signal à tous les processus d'un groupe de processus.
la source
killpg
appel système à ce stade.Premièrement, je ne peux pas reproduire le mplayer survivant au terminal tué, en utilisant
xterm
.La raison pour laquelle il meurt, c'est qu'il obtient un SIGHUP de la mort de son parent.
la source