Czy bezpiecznie jest zamknąć powłokę, klikając „X” lub „ctrl + d”?

11

Czy bezpiecznie jest zamknąć powłokę, klikając „X” lub używając „ctrl + d”, gdy jesteś zalogowany jako root za pomocą su, czy bezpieczniej jest ją zamknąć, wpisując „exit”? Czy w ogóle jest jakaś różnica (pod względem bezpieczeństwa), czy jest taka sama i nie ma znaczenia, z której strony korzystasz?

pootzko
źródło

Odpowiedzi:

13

Ctrl-D lub exitjest taki sam.

Jeśli używasz „X”, menedżer okien wysyła sygnał zakończenia do powłoki. Który ma na koniec ten sam wynik. Jeśli powłoka nie zareaguje, użytkownik zwykle otrzyma ostrzeżenie, a następnie może zmusić ją do zakończenia (równą kill -9 $PID).

Istnieje jedna niewielka różnica między „X” - a metodą wyjścia, jeśli używasz zshjako powłoki: Jeśli masz uruchomiony proces w tle, exit/ ctrl-D po raz pierwszy wyświetli komunikat ostrzegawczy „masz uruchomione zadania”, drugi raz powłoka jest zamknięta. Za pomocą przycisku „X” powłoka kończy się natychmiast bez ostrzeżeń.

Jofel
źródło
5
Istnieje również różnica w bashu. Jeśli ctrl + d, wszelkie procesy w tle &pozostaną uruchomione. Jeśli „X”, zostaną rozwiązane.
Patrick
3
@Patrick wydaje się, że zależy to raczej od emulatora terminala niż od powłoki. Chyba że emulator wyraźnie zabije procesy działające w tle, o ile wiem, bash nie wyśle ​​ich PODSUMOWANIE, bez względu na to, jak wyjdziesz. Właśnie próbowałem tego na Mac OS X 10.7.3. Terminal nie zabija procesów w tle, ale Xterm (działający w X11) tak. Nie wiem, czy jest to zachowanie Xterm, czy ogólnie X11.
Chris Page
@jofel to nieprawda, zobacz moją odpowiedź.
Patrick
@Patrick dzięki za zwrócenie na to uwagi. Zmienię lub usunę moją odpowiedź.
jofel
@ jofel nah, nie usuwaj, informacje zsh są nadal przydatne. W Zsh jestem tylko noobem, więc nie mogę tam komentować. Ale to przynosi dobrą rację, więc zredagowałem swoją odpowiedź, aby zauważyć, że różne powłoki mogą zachowywać się inaczej, a domyślne zachowanie, które opisałem, zależy od bash, podczas gdy OP nie określa swojej powłoki.
Patrick
4

Zamknięcie emulatora terminala to nie to samo, co naciśnięcie CTRL + D(chyba że opcja huponexitjest ustawiona).

  • Po zamknięciu terminala (kliknięcie „X”) emulator terminala wysyła SIGHUP do powłoki. Kiedy bash otrzymuje SIGHUP, wysyła również SIGHUP do wszystkich twoich zadań.

  • Po wyjściu z terminala za pomocą CTRL+Dlub logoutlub exit, powłoka wychodzi bez wysyłania SIGHUP do wszystkich zadań. Jest to domyślne zachowanie, ale może zostać zmieniony przez ustawienie bash shoptustawienie huponexit.

Tak więc ostatecznie, jeśli Twoim celem jest upewnienie się, że nic nie działa w tle, bezpieczniej jest kliknąć „X”.

.

Informacje podane przez Jofela w jego komentarzu są niepoprawne (przepraszam Jofel). Emulator terminala nie ma pojęcia, jakie zadania działają pod powłoką, więc nie można ich zakończyć.

UWAGA :
To zachowanie jest całkowicie zależne od powłoki. Jest całkiem możliwe, że różne powłoki mają różne domyślne zachowania.

Patrick
źródło
Gdy Ctrl+dproces jest dziedziczony przez PPID 1 = systemd
EdiD
1

Nie ma różnicy. Tak bardzo, że naciskając ^ D, robisz to samo, co wpisując „exit”:

$ su -
Password:
# [press ^D]
logout
Renan
źródło
Tak, CTRL+Di exitto samo, pytanie dotyczyło kliknięcia „X” menedżera okien, aby zamknąć okno, a nie pisania exit:-)
Patrick