Est-il sûr de fermer le shell simplement en cliquant sur "X" ou en utilisant "ctrl + d"?

11

Est-il sûr de fermer le shell en cliquant simplement sur "X" ou en utilisant "ctrl + d" lorsque vous êtes connecté en tant que root avec su ou est-il plus sûr de le fermer en tapant "exit"? Y a-t-il une différence (en termes de sécurité) ou est-ce la même chose et peu importe la façon dont vous l'utilisez?

pootzko
la source

Réponses:

13

Ctrl-D ou exitest identique.

Si vous utilisez le "X", le gestionnaire de fenêtres envoie un signal d'arrêt au shell. Ce qui a finalement le même résultat. Si le shell ne réagit pas, l'utilisateur reçoit généralement un avertissement et peut alors forcer la fin du shell (égal à kill -9 $PID).

Il y a une petite différence entre le "X" - et la méthode exit si vous utilisez zshcomme shell: si vous avez un processus d'arrière-plan en cours, exit/ ctrl-D ne produit pour la première fois qu'un message d'avertissement "vous avez des travaux en cours", le deuxième fois que la coquille est fermée. Avec le bouton "X", le shell se termine immédiatement sans aucun avertissement.

jofel
la source
5
Il y a aussi une différence dans bash. Si vous ctrl + d, tous les processus en arrière-plan &continueront de fonctionner. Si vous "X", alors ils seront supprimés.
Patrick
3
@Patrick, cela semble dépendre de l'émulateur de terminal plutôt que du shell. À moins que l'émulateur ne tue explicitement les processus en arrière-plan, autant que je sache, bash ne leur enverra pas SIGHUP, quelle que soit la façon dont vous quittez. Je viens de l'essayer sur Mac OS X 10.7.3. Terminal ne tue pas les processus en arrière-plan, mais Xterm (en cours d'exécution dans X11) le fait. Je ne sais pas si c'est un comportement de Xterm en particulier ou de X11 en général.
Chris Page
@jofel ce n'est pas vrai, voir ma réponse.
Patrick
@Patrick merci de l'avoir signalé. Je vais modifier ou supprimer ma réponse.
jofel
@jofel nah, ne supprimez pas, les informations zsh sont toujours utiles. Je ne suis qu'un noob chez zsh, donc je ne peux pas commenter là-bas. Mais cela soulève un bon point, j'ai donc modifié ma réponse pour noter que différents shells peuvent se comporter différemment, et le comportement par défaut que j'ai décrit dépend de bash, tandis que l'OP ne spécifie pas son shell.
Patrick
4

Fermer l'émulateur de terminal ne revient pas à appuyer sur CTRL + D(sauf si l'option huponexitest définie).

  • Lorsque vous fermez le terminal (en cliquant sur "X"), l'émulateur de terminal envoie un SIGHUP au shell. Lorsque bash reçoit un SIGHUP, il envoie également un SIGHUP à tous vos travaux.

  • Lorsque vous quittez le terminal avec CTRL+Dou logoutou exit, le shell se ferme sans envoyer de SIGHUP à toutes les tâches. Il s'agit du comportement par défaut, mais il peut être modifié en définissant le shoptparamètre bash huponexit.

Donc, en fin de compte, si votre objectif est de vous assurer que rien ne fonctionne en arrière-plan, il est préférable de cliquer sur "X".

.

Les informations fournies par jofel dans son commentaire sont incorrectes (désolé jofel). L'émulateur de terminal n'a aucune idée des travaux exécutés sous le shell, il ne peut donc pas les terminer.

REMARQUE :
ce comportement dépend complètement du shell. Il est tout à fait possible que différents shells aient des comportements par défaut différents.

Patrick
la source
Lorsque le Ctrl+dprocessus est hérité par PPID 1 = systemd
EdiD
1

Il n'y a pas de différence. À tel point que lorsque vous appuyez sur ^ D, vous faites la même chose que de taper 'exit':

$ su -
Password:
# [press ^D]
logout
Renan
la source
Oui, CTRL+Det ce exitsont les mêmes, la question était de cliquer sur le "X" du gestionnaire de fenêtres pour fermer la fenêtre, pas de taper exit:-)
Patrick