Qualcuno può dirmi la differenza tra ctrl+ ze ctrl+ c?
Quando sono nel terminale, entrambe le combinazioni interrompono il processo corrente, ma qual è esattamente la differenza tra entrambi?
Qualcuno può dirmi la differenza tra ctrl+ ze ctrl+ c?
Quando sono nel terminale, entrambe le combinazioni interrompono il processo corrente, ma qual è esattamente la differenza tra entrambi?
Risposte:
Se lasciamo i casi limite da un lato, la differenza è semplice. Control+ Cinterrompe l'applicazione quasi immediatamente mentre Control+ la Zsposta in background, sospesa.
La shell invia segnali diversi alle applicazioni sottostanti su queste combinazioni:
Control+ C(carattere di controllo intr
) invia SIGINT che interromperà l'applicazione. Di solito causando l'interruzione, ma spetta all'applicazione decidere.
Control+ Z(carattere di controllo susp
) invia SIGTSTP a un'applicazione in primo piano, posizionandolo efficacemente in background, sospeso. Questo è utile se devi uscire da qualcosa come un editor per andare a prendere alcuni dati di cui hai bisogno. È possibile tornare all'applicazione eseguendo fg
(o %x
dove si x
trova il numero lavoro come mostrato in jobs
).
Possiamo testarlo eseguendo nano TEST
, quindi premendo Control+ Ze quindi eseguendo ps aux | grep TEST
. Questo ci mostrerà che il nano
processo è ancora in corso:
oli 3278 0.0 0.0 14492 3160 pts/4 T 13:59 0:00 nano TEST
Inoltre, possiamo vedere (da quella T, che si trova nella colonna dello stato) che il processo è stato interrotto . Quindi è ancora vivo, ma non funziona ... Può essere ripreso.
Alcune applicazioni si arrestano in modo anomalo se hanno processi esterni in corso (come una richiesta Web) che potrebbero andare in timeout mentre dormono.
bg
(anziché fg
) per non sospendere un'applicazione che è stata Ctrl + Z'ed senza rimetterla in primo piano; dandoti effettivamente il controllo sia della shell che ha avviato l'applicazione sia dell'applicazione stessa, come se avessi usato &
all'avvio dell'applicazione. Questo spesso è utile quando ti sei dimenticato di iniziare con &
:)
fg
nuovo!
ctrl c
o entrambi ctrl z
? L'impostazione predefinita è SID (bash)?
Control+ Zsospende un processo ( SIGTSTP
) e Control+ Cinterrompe un processo ( SIGINT
)
http://en.wikipedia.org/wiki/Control-Z
Su sistemi simili a Unix, Control + Z è il mapping di tastiera predefinito più comune per la sequenza di tasti che sospende un processo
http://en.wikipedia.org/wiki/Control-C
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 chiuso. In genere un programma che gestisce un SIGINT si interromperà comunque, o almeno terminerà l'attività in esecuzione al suo interno
Ctrl+ CViene usato per uccidere un processo con il segnale SIGINT
, in altre parole è un educato uccidere .
Ctrl+ Z viene utilizzato per sospendere un processo inviandogli il segnale SIGTSTP
, che è come un segnale di sospensione , che può essere annullato e il processo può essere ripreso di nuovo.
Tuttavia, quando un processo viene sospeso, possiamo riprenderlo nuovamente da fg
(riprendi in primo piano) e bg
(riprendi in background), ma non riesco a riprendere un processo interrotto, questa è una differenza tra l'utilizzo di Ctrl+ C& Ctrl+ Z.
Come possiamo visualizzare i processi sospesi?
Il jobs
comando fornisce un output in questo modo:
[1]- Stopped cat
[2]+ Stopped vi
Come interrompere un processo sospeso in background?
Usando il kill
comando:
kill %n
dove n
è il numero visualizzato dal jobs
comando. Quindi, se voglio uccidere cat: kill %1
.
Per dirla semplicemente:
CTRL-C chiede l' interruzione del programma .
CTRL-Z forza il programma a sospendere e andare in secondo piano .
Ciò ti consente di riprenderlo in seguito con il comando fg
. Le attività in background rimanenti vengono interrotte quando si esce dalla shell di accesso.
Questo dovrebbe aiutare
Ctrl+ Zviene utilizzato per sospendere un processo inviandogli il segnale SIGSTOP, che non può essere intercettato dal programma. Mentre Ctrl+ Cviene utilizzato per terminare un processo con il segnale SIGINT, e può essere intercettato da un programma in modo che possa ripulirsi da solo prima di uscire o non uscire affatto.
SIGTSTP
, che può essere catturato dal programma. Ci sono quattro diversi segnali, che possono sospendere un programma SIGSTOP
, SIGTSTP
, SIGTTIN
, SIGTTOU
. Di quelli solo SIGSTOP
non possono essere bloccati. Gli altri tre vengono utilizzati dal terminale per arrestare il processo in condizioni diverse.
quando premi ctrl+ c, significa che invii SIGINT al tuo processo. come si digita questo comando: kill -SIGINT <your_pid>
. Ti ucciderà il tuo processo. Ecco perché non puoi vederlo quando emetti il comando ps .
Quando premi ctrl+ z, significa che invii SIGSTOP al tuo processo. come si digita questo comando: kill -SIGKSTOP <your_pid>
. Arresterà il tuo processo, ma il processo è ancora vivo. Quindi puoi riattivare il tuo processo inviando SIGCONT al tuo processo.