È sicuro chiudere la shell semplicemente facendo clic su "X" o usando "ctrl + d"?


11

È sicuro chiudere la shell semplicemente facendo clic su "X" o usando "ctrl + d" mentre si è connessi come root con su o è più sicuro chiuderlo digitando "exit"? C'è qualche differenza (dal punto di vista della sicurezza) o è la stessa e non importa in che modo usi?

Risposte:


13

Ctrl-D o exitè lo stesso.

Se si utilizza la "X", il gestore di finestre invia un segnale di fine alla shell. Che ha alla fine lo stesso risultato. Se la shell non reagisce, l'utente di solito riceve un avviso e può quindi forzare la chiusura della shell (uguale a kill -9 $PID).

C'è una piccola differenza tra la "X" - e il metodo exit se si sta usando zshcome shell: se si sta eseguendo un processo in background, exit/ ctrl-D produce per la prima volta solo un messaggio di avviso "si hanno lavori in esecuzione", il la seconda volta che la shell viene chiusa. Con il pulsante "X", la shell termina immediatamente senza alcun avviso.


5
Inoltre c'è una differenza anche in bash. Se premi Ctrl + D, tutti i processi in background &rimarranno in esecuzione. Se si "X", verranno terminati.
Patrick

3
@Patrick questo sembra dipendere dall'emulatore di terminale piuttosto che dalla shell. A meno che l'emulatore non uccida esplicitamente i processi in background, per quanto ne so bash non li invierà SIGHUP indipendentemente da come esci. Ho appena provato questo su Mac OS X 10.7.3. Il terminale non uccide i processi in background, ma Xterm (in esecuzione in X11). Non so se sia un comportamento specifico di Xterm o X11 in generale.
Chris Pagina

@jofel questo non è vero, vedi la mia risposta.
Patrick,

@Patrick grazie per averlo segnalato. Modificherò o cancellerò la mia risposta.
jofel,

@jofel nah, non cancellare, le informazioni zsh sono ancora utili. Sono solo un noob a zsh, quindi non posso commentare lì. Ma questo fa emergere un buon punto, quindi ho modificato la mia risposta per notare che diverse shell possono comportarsi diversamente, e il comportamento predefinito che ho descritto dipende bash, mentre l'OP non specifica la sua shell.
Patrick,

4

Chiudere l'emulatore di terminale non equivale a premere CTRL + D(a meno che l'opzione non huponexitsia impostata).

  • Quando si chiude il terminale (facendo clic su "X"), l'emulatore di terminale invia un SIGHUP alla shell. Quando bash riceve un SIGHUP, invia anche un SIGHUP a tutti i tuoi lavori.

  • Quando si esce dal terminale con CTRL+Do logouto exit, la shell si chiude senza inviare un SIGHUP a tutti i lavori. Questo è il comportamento predefinito, ma può essere modificato impostando l' shoptimpostazione bash huponexit.

Quindi, alla fine, se il tuo obiettivo è assicurarti che non ci sia nulla in esecuzione in background, fai clic su "X".

.

Le informazioni fornite da jofel nel suo commento sono errate (scusate jofel). L'emulatore di terminale non ha idea di quali lavori stiano eseguendo sotto la shell, quindi non può terminarli.

NOTA :
questo comportamento dipende completamente dalla shell. È del tutto possibile che shell diverse abbiano comportamenti predefiniti diversi.


Quando il Ctrl+dprocesso è ereditato da PPID 1 = systemd
EdiD

1

Non c'è differenza. Al punto che, quando premi ^ D, stai facendo la stessa cosa digitando 'esci':

$ su -
Password:
# [press ^D]
logout

Sì, CTRL+De exitsono uguali, la domanda riguardava il clic sulla "X" del gestore della finestra per chiudere la finestra, senza digitare exit:-)
Patrick,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.