Ist es sicher, die Shell zu schließen, indem Sie einfach auf "X" klicken oder "Strg + D" verwenden?

11

Ist es sicher, die Shell zu schließen, indem Sie einfach auf "X" klicken oder "Strg + D" verwenden, während Sie als root mit su angemeldet sind, oder ist es sicherer, sie zu schließen, indem Sie "exit" eingeben? Gibt es überhaupt einen Unterschied (in Bezug auf die Sicherheit) oder ist er derselbe und spielt keine Rolle, wie Sie ihn verwenden?

pootzko
quelle

Antworten:

13

Strg-D oder exitist das gleiche.

Wenn Sie das "X" verwenden, sendet der Fenstermanager ein Beendigungssignal an die Shell. Welches hat am Ende das gleiche Ergebnis. Wenn die Shell nicht reagiert, erhält der Benutzer normalerweise eine Warnung und kann das Beenden der Shell erzwingen (gleich kill -9 $PID).

Es gibt einen kleinen Unterschied zwischen der "X" - und der Exit-Methode, wenn Sie zshals Shell verwenden: Wenn ein Hintergrundprozess ausgeführt wird, erzeugt exit/ ctrl-D zum ersten Mal nur eine Warnmeldung "Sie haben laufende Jobs", die Zum zweiten Mal wird die Shell geschlossen. Mit der Schaltfläche "X" wird die Shell sofort ohne Warnungen beendet.

Jofel
quelle
5
Auch bei Bash gibt es einen Unterschied. Wenn Sie Strg + D drücken, werden alle Prozesse mit Hintergrund &ausgeführt. Wenn Sie "X", werden sie beendet.
Patrick
3
@Patrick Dies scheint eher vom Terminalemulator als von der Shell abzuhängen. Es sei denn, der Emulator beendet explizit Hintergrundprozesse, soweit ich weiß, wird bash sie nicht SIGHUP senden, egal wie Sie beenden. Ich habe es gerade unter Mac OS X 10.7.3 versucht. Das Terminal beendet die Hintergrundprozesse nicht, Xterm (läuft in X11) jedoch. Ich weiß nicht, ob dies ein spezifisches Verhalten von Xterm oder allgemein von X11 ist.
Chris Seite
@jofel das ist nicht wahr, siehe meine Antwort.
Patrick
@ Patrick danke für den Hinweis. Ich werde meine Antwort bearbeiten oder löschen.
Jofel
@jofel nah, nicht löschen, die zsh info ist immer noch nützlich. Ich bin nur ein Noob bei zsh, daher kann ich dort keinen Kommentar abgeben. Aber das bringt einen guten Punkt hervor, deshalb habe ich meine Antwort bearbeitet, um festzustellen, dass sich verschiedene Shells unterschiedlich verhalten können und das von mir beschriebene Standardverhalten bash-abhängig ist, während das OP seine Shell nicht spezifiziert.
Patrick
4

Das Schließen des Terminalemulators entspricht nicht dem Drücken CTRL + D(es sei denn, die Option huponexitist festgelegt).

  • Wenn Sie das Terminal schließen (auf "X" klicken), sendet der Terminalemulator ein SIGHUP an die Shell. Wenn bash ein SIGHUP empfängt, sendet es auch ein SIGHUP an alle Ihre Jobs.

  • Wenn Sie das Terminal mit CTRL+Doder logoutoder verlassen exit, wird die Shell beendet, ohne ein SIGHUP an alle Jobs zu senden. Dies ist das Standardverhalten, kann jedoch durch Festlegen der Bash- shoptEinstellung geändert werden huponexit.

Wenn Sie also letztendlich sicherstellen möchten, dass nichts im Hintergrund läuft, klicken Sie auf "X".

.

Die von jofel in seinem Kommentar angegebenen Informationen sind falsch (sorry jofel). Der Terminalemulator hat keine Ahnung, welche Jobs unter der Shell ausgeführt werden, daher kann er sie nicht beenden.

HINWEIS :
Dieses Verhalten hängt vollständig von der Shell ab. Es ist durchaus möglich, dass verschiedene Shells unterschiedliche Standardverhalten haben.

Patrick
quelle
Wenn der Ctrl+dProzess von PPID 1 geerbt wird = systemd
EdiD
1

Es gibt keinen Unterschied. So sehr, dass Sie beim Drücken von ^ D dasselbe tun wie 'exit' eingeben:

$ su -
Password:
# [press ^D]
logout
Renan
quelle
Ja, CTRL+Dund exitdas ist auch so, die Frage war, auf das "X" des Fenstermanagers zu klicken, um das Fenster zu schließen, und nicht zu tippen exit:-)
Patrick