Quando provo a fermare qualcosa, uso ^C
e talvolta ^D
nel terminale.
Qual è la differenza tra i due? Perché alcuni programmi non rispondono ^C
, ma ^D
. Perché Terminal.app si chiude quando uso ^D
?
Quando provo a fermare qualcosa, uso ^C
e talvolta ^D
nel terminale.
Qual è la differenza tra i due? Perché alcuni programmi non rispondono ^C
, ma ^D
. Perché Terminal.app si chiude quando uso ^D
?
Risposte:
CtrlCindica al terminale di inviare un SIGINT
al processo in primo piano corrente, che per impostazione predefinita si traduce in chiusura dell'applicazione. CtrlDdice al terminale che dovrebbe registrare un EOF sull'input standard, che bash interpreta come un desiderio di uscire.
Ctrl+ D( ^D
) indica la fine del file . Funziona solo all'inizio di una riga (sto semplificando un po ') e non ha alcun effetto se il programma non sta leggendo l'input dal terminale. Nel tuo esperimento, hai ^D
detto alla shell che non avresti digitato più comandi, quindi è uscito; quindi il terminale è uscito perché il suo sottoprogramma era terminato.
Ctrl+ C( ^C
) significa "interrompere", cioè interrompere ciò che stai facendo. Tecnicamente, premendo si ^C
invia il segnale INT , che per impostazione predefinita termina un'applicazione, ma che in molti programmi significa tornare al livello superiore (ad esempio, in una shell, smettere di digitare una riga di comando e tornare a un prompt incontaminato).
Se un programma non risponde ^C
, puoi provare Ctrl+ \( ^\
). Questo invia il segnale QUIT , che per impostazione predefinita termina un'applicazione e che non molti programmi intercettano.
Un altro tasto che invia un segnale è Ctrl+ Z( ^Z
). Invia il segnale TSTP , che mette in pausa il programma in primo piano. (TSTP è l'abbreviazione di "terminal stop"; è simile a STOP ma TSTP può essere ignorato mentre STOP non può.) Dalla shell, è possibile riprendere l'esecuzione di quel programma con il fg
comando (riprendi in primo piano) o il bg
comando (riprendi in sfondo).
Tutte queste chiavi possono essere modificate con il stty
comando. Alcuni programmi, in particolare i programmi a schermo intero con combinazioni di tasti, li disabilitano.
KeyboardInterrupt
? Si chiude con ctrl + d (se all'inizio di una riga) e con ctrl + \.
Aggiungendo alle 2 risposte davvero buone sopra, ecco un esempio:
Se digiti python
nella shell, ti porta nel prompt >>> di python.
Ora, se colpisci Ctrl+C
, dirà KeyboardInterrupt
e rimani nel >>>.
Se entri in un ciclo for, ad esempio digitando for x in (text):
, aspetta che tu digiti ulteriormente mostrando un prompt ..., se premi Ctrl+C
ora, uscirà dall'istruzione for e tornerà al prompt >>>
Se premi Ctrl+D
in qualsiasi momento, sia in >>> o ... uscirà dal prompt di Python e tornerà alla shell originale.
Allo stesso modo, se inviato a un'altra macchina, a Ctrl+C
terminerà qualsiasi comando esistente, Ctrl+D
lo farà e uscirà anche dalla macchina. (Inoltre, la Delete
chiave è la stessa di fare un Ctrl+D
)