Qual è la differenza tra Ctrl-z e Ctrl-c nel terminale?

94

Qualcuno può dirmi la differenza tra ctrl + z e ctrl + c ?

Quando sono nel terminale, entrambe le combinazioni interrompono il processo corrente, ma quale è esattamente la differenza tra entrambi?

    
posta chaitanya lakkundi 13.08.2014 - 15:50
fonte

6 risposte

128

Se lasciamo da parte i casi limite, la differenza è semplice. Control + C interrompe l'applicazione quasi immediatamente mentre Control + Z lo interrompe in background, sospeso.

La shell invia segnali diversi alle applicazioni sottostanti su queste combinazioni:

  • Controllo + C (carattere di controllo intr ) invia SIGINT che interromperà l'applicazione. Di solito causando l'interruzione, ma questo dipende dall'applicazione per decidere.

  • Controllo + Z (carattere di controllo susp ) invia SIGTSTP a un'applicazione in primo piano, mettendola effettivamente in secondo piano, sospesa. Questo è utile se hai bisogno di uscire da qualcosa come un editor per andare e prendere alcuni dati necessari. Puoi tornare all'applicazione eseguendo fg (o %x dove x è il numero del lavoro come mostrato in jobs ).

    Possiamo testare questo eseguendo nano TEST , quindi premendo Controllo + Z e quindi eseguendo ps aux | grep TEST . Questo ci mostrerà che il processo nano è ancora in esecuzione:

    oli     3278  0.0  0.0  14492  3160 pts/4    T    13:59   0:00 nano TEST
    

    Inoltre, possiamo vedere (da quella T, che è nella colonna di stato) che il processo è stato fermato . Quindi è ancora vivo, ma non è in esecuzione ... Può essere ripreso.

    Alcune applicazioni si arrestano in modo anomalo se hanno processi esterni in corso (come una richiesta web) che potrebbero interrompersi mentre dormono.

risposta data Oli 13.08.2014 - 15:56
fonte
14

Controllo + Z sospende un processo ( SIGTSTP ) e Controllo + C interrompe un processo ( SIGINT )

link

  

Sui sistemi di tipo Unix, Control + Z è la mappatura della tastiera predefinita più comune per la sequenza di tasti che sospende un processo

link

  

Nei sistemi POSIX, la sequenza fa sì che il programma attivo riceva un segnale SIGINT. Se il programma non specifica come gestire questa condizione, viene interrotto. Tipicamente un programma che gestisce un SIGINT si risolverà da solo, o almeno terminerà l'attività in esecuzione al suo interno

    
risposta data Sleep Deprived Bulbasaur 13.08.2014 - 15:56
fonte
9

Ctrl + C è usato per uccidere un processo con segnale SIGINT , in altre parole è un kill educato . p>

Ctrl + Z è usato per sospendere un processo inviandogli il segnale SIGSTOP , che è come un segnale di sonno, che può essere annullato e il processo può essere ripreso di nuovo.

Tuttavia, quando un processo è sospeso, possiamo riprenderlo di nuovo con fg (resume in forground) e bg (resume in background) , ma non posso riprendere un processo ucciso, questa è una differenza tra l'uso di Ctrl + C & amp; Ctrl + Z .

Come visualizzare processo sospeso?

Usando il comando jobs, l'output sarà:

[1]-  Stopped                 cat
[2]+  Stopped                 vi

Come uccidere un processo sospeso in background?

Usando il comando uccidi :

kill% n dove n saranno numeri visualizzati nel comando jobs, quindi voglio uccidere cat: kill %1 .

    
risposta data nux 14.08.2014 - 09:49
fonte
6

Questo dovrebbe aiutare

  

Ctrl + Z è usato per sospendere un processo inviandogli il segnale SIGSTOP, che non può essere intercettato dal programma. Mentre Ctrl + C è usato per uccidere un processo con il segnale SIGINT e può essere intercettato da un programma in modo che possa ripulirsi prima di uscire, o non uscire a tutti.

    
risposta data Graham 13.08.2014 - 15:58
fonte
3

quando si preme ctrl + c , significa che si invia SIGINT al processo. come si digita questo comando: kill -SIGINT <your_pid> . Ti ucciderà il tuo processo. Ecco perché non puoi vederlo quando il comando ps .
Quando si preme ctrl + z , significa che si invia SIGSTOP al processo. come si digita questo comando: kill -SIGKSTOP <your_pid> . Interromperà il tuo processo, ma il processo è ancora vivo. Quindi puoi riattivare il tuo processo inviando SIGCONT al tuo processo.

    
risposta data P_O_I_S_O_N 14.08.2014 - 09:24
fonte
3

Per dirla semplicemente:

  • CTRL - C richiede che il programma annulli .

  • CTRL - Z forza il programma a sospendere e andare in secondo piano .

    Ciò ti consente di riprenderlo in seguito con il comando fg . Le restanti attività in background vengono eliminate quando si esce dalla shell di login.

risposta data thomasrutter 15.08.2014 - 02:39
fonte

Leggi altre domande sui tag