web-dev-qa-db-fra.com

Tuer Shell à l'aide d'un terminal

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é?

2
luv.preet

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
3