2011-03-27 00:39:57 +0000 2011-03-27 00:39:57 +0000
191
191

Cosa c'è di diverso tra Ctrl+Z e Ctrl+C nella riga di comando Unix?

Sto usando il terminale Mac OS X. E uso Ctrl+Z o Ctrl+C per fermare alcuni programmi. Ma mi sono reso conto che non so cosa stiano facendo esattamente. Cosa sono e qual è la differenza tra loro?

Questa domanda era una * Super User Question of the Week . Leggi il 13 marzo 2011 * blog entry per maggiori dettagli o * invia il tuo ** Domanda della settimana.

Risposte (6)

255
255
255
2011-03-27 01:15:51 +0000

Control+Z viene utilizzato per sospendere un processo inviandogli il segnale SIGSTOP, che non può essere intercettato dal programma. Mentre Control+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 affatto.

Se si sospende un processo, questo apparirà nella conchiglia per dirvi che è stato sospeso:

[1]+ Stopped yes

Tuttavia, se ne uccidete uno, non vedrete alcuna conferma se non quella di essere riportato ad un prompt della conchiglia. Quando si sospende un processo, si possono fare anche cose strane. Per esempio, eseguendo questo:

fg
``` ```
bg

Con un programma sospeso lo riporterà in primo piano.

E l'esecuzione del comando

kill %1
``` ```
jobs

Con un programma sospeso permetterà di eseguirlo in background (l'uscita del programma andrà comunque al TTY, però).

Se volete eliminare un programma sospeso, non dovete prima riportarlo con fg, potete semplicemente eseguire il comando:

[1]- Stopped pianobar
[2]+ Stopped yes
``` &001 


Se avete più comandi sospesi, eseguendo 


&001 &001 


li elencherete, in questo modo: 


&001 &001 


Usando `%#`, dove `#` è il numero del lavoro (quello tra parentesi quadre dell'uscita `jobs`) con `bg`, `fg`, o `kill`, può essere usato per eseguire l'azione su quel lavoro.
22
22
22
2011-03-27 00:43:15 +0000

Ctrl+Z sospende il processo con SIGTSTP, si può riprendere più tardi. Ctrl+C interrompe il processo con SIGINT, che termina il processo a meno che non venga manipolato/ignoreggiato dal target, quindi non è possibile riprenderlo. C'è anche un SIGSTOP che può essere inviato da kill() e che il processo non può essere intercettato. SIGCONT è la controparte sia di SIGSTOP che di SIGTSTP, che non sospende il processo.

18
18
18
2011-03-27 11:52:36 +0000

CTRL+Z arresta (mette in pausa) un lavoro

CTRL+C termina un lavoro

con CTRL+C non è possibile riprendere il processo ma con CTRL+Z il lavoro può essere ripreso semplicemente entrando al comando promt:

fg %1

se si hanno più processi in pausa allora si dovrebbe fare

jobs
``` ```
fg %3

per vedere l'uscita e selezionare il numero appropriato per riprendere e. g.

bg %n
``` &001 



riprende il terzo processo dell'elenco. Si possono anche avere lavori in esecuzione in background con 


&001 &001 


dove n è il numero del lavoro.
3
3
3
2014-07-03 15:57:10 +0000

CTRL+Z arresta (mette in pausa) un processo

CTRL+C termina un processo

Con CTRL+C non è possibile riprendere il processo, ma con CTRL+Z il processo può essere ripreso semplicemente inserendo al prompt dei comandi:

fg %1

Se avete più processi in pausa allora dovreste fare

processi

per vedere l'uscita.

3
3
3
2014-03-13 06:48:21 +0000
Cntrl + Z pause the currently running process.

e

Cntrl + C simply terminates the running process.

Utilizzando Cntrl + C non è possibile riprendere il processo. dove come utilizzando Cntrl + Z è possibile riprendere il processo.

utilizzare fg %1 per riprendere il processo.

2
2
2
2013-02-26 17:19:22 +0000

Le risposte precedenti sono corrette, ma per qualche ragione sconosciuta Ctrl-Z sospende anche tutti i processi dei bambini, ma killall -SIGSTOP … sospende solo il processo più avanzato (genitore) e lascia i bambini a correre come vogliono.