ctrl c vs. ctrl z con lavoro in primo piano


26

Ctrl+ Zinterrompe il lavoro mentre Ctrl+ Cuccide il lavoro.

Perché? L'altro modo non avrebbe più senso?

z@z-lap:~$ sleep 100&
[1] 4458
z@z-lap:~$ sleep 200&
[2] 4459
z@z-lap:~$ jobs
[1]-  Running                 sleep 100 &
[2]+  Running                 sleep 200 &
z@z-lap:~$ fg %1
sleep 100
^Z
[1]+  Stopped                 sleep 100
z@z-lap:~$ jobs
[1]+  Stopped                 sleep 100
[2]-  Running                 sleep 200 &
z@z-lap:~$ fg %1
sleep 100
^C
z@z-lap:~$ jobs
[2]+  Running                 sleep 200 &

4
"L'altro modo non avrebbe più senso?" Potresti specificare perché pensi che sarebbe?
glglgl,

Risposte:


55

Penso che potresti essere confuso riguardo alla notazione sul controllo del lavoro. In particolare "Interrotto" significa che un lavoro è ancora in vita ma che è stata trattenuta la sua capacità di elaborare qualsiasi cosa (non gli viene concesso alcun tempo sulla CPU per elaborare nulla). Questo è effettivamente uno stato "Pausa" o "Sospeso", sebbene non sia il termine tecnico corretto.

  • CtrlCnon "interrompe" un lavoro, lo annulla o lo uccide. Tecnicamente causa l'invio al programma di un segnale di interruzione che gli dice di interrompere ciò che sta facendo e di uscire immediatamente. Alcuni programmi sentiranno questo segnale e eseguiranno alcuni lavori di pulizia di emergenza su se stessi prima di uscire. Altri non risponderanno al segnale e successivamente verranno semplicemente interrotti.

  • CtrlZd'altro canto, "interrompe" un lavoro. Ancora una volta questo viene fatto con un segnale, ma questa volta si tratta di un segnale di "arresto" anziché di "interruzione". Questo lo mette effettivamente in attesa e restituisce il controllo alla shell, ma in realtà non termina il lavoro. Se si desidera che un lavoro di questo tipo continui a essere eseguito, è quindi possibile emettere un bgcomando per inviare l'ultimo lavoro interrotto in background. Continuerà quindi a essere eseguito come processo in background come se lo avessi eseguito &in primo luogo. È inoltre possibile utilizzare fgper riprendere l'ultimo lavoro interrotto in primo piano (consentendogli di continuare da dove era stato interrotto e consentendoti di interagire di nuovo con esso).


Penso ancora che Ctrl + Z invierà SIGKILL e Ctrl + C invii SIGINIT. Quindi anche Ctrl + Z ucciderebbe il lavoro. Ma dal mio esempio Ctrl + Z Interrompe il lavoro come hai detto. Quindi mi rende un po 'confuso.
neo0

10
@ neo0 - forse sei abituato a qualche strana configurazione personalizzata? Puoi configurare quella roba, anche se probabilmente non dovresti avere un'applicazione che si basa su quelle mappe. Ma la configurazione predefinita è CTRL+C=SIGINTe CTRL+Z=SIGTSTP.
Mikeserv,

3
Caleb ha ragione (+1). Il ctrl-Z arresta il programma, che dovresti considerare "bloccandolo", ma quel programma è ancora in memoria, i suoi file sono aperti, ecc. Non viene ucciso / terminato.
Olivier Dulac l'

"Sospendi" potrebbe essere più chiaro di "stop".
Russell Borogove,

1
@jiggunjer Riguarda la forma delle cose. Questa risposta fornisce alcune informazioni sul perché sono necessari due passaggi e questo introduce alcune funzioni per renderli più indolori.
Caleb,
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.