echo $$
Il raconte le PID du shell. Donc, si je tue ce Shell en utilisant
kill 123 #suppose 123 is PID of Shell
Rien ne se passe réellement, j'ai essayé. J'ai encore couru
echo $$
et le Shell fonctionnait sous le même PID. Pourquoi le Shell n'est pas arrêté? Que peut-il arriver si le shell est tué?
La raison principale en est que les shells sont conçus pour intercepter le signal TERM
. Ce comportement est documenté. Pour citer bash 4.3 manuel:
SIGNAUX
Lorsque bash est interactif, en l'absence de toute interruption, il ignore SIGTERM (pour que kill 0 ne tue pas un shell interactif), et SIGINT est capturé et traité (pour que l'attente intégrée soit interruptible). Dans tous les cas, bash ignore SIGQUIT. Si le contrôle de tâche est actif, bash ignore SIGTTIN, SIGTTOU et SIGTSTP.
De man kill
:
Le signal par défaut pour kill est TERM.
Maintenant, si vous deviez spécifier kill -KILL $$
, qu'est-ce qui tuerait effectivement votre Shell, et une fois que le Shell contrôlant aura quitté - cela ferait fermer le terminal. Les options -9
, -KILL
et -SIGKILL
sont toutes des alias pour le même signal kill
, ce qui explique pourquoi l'une de ces 3 fonctions fonctionne. dans les commentaires.
Contrairement à ce qu'a dit M. Becerra, cela n'a rien à voir avec la fenêtre elle-même, car le PID de la fenêtre est toujours différent de celui de Shell:
# Shell PID
$ cat /proc/self/status | grep '^Pid:'
Pid: 7058
$ echo $$
14709
# GUI window PID
$ xdotool getactivewindow getwindowpid
2774