¿Cuál es la diferencia entre Ctrl-z y Ctrl-c en el terminal?

95

¿Alguien puede decirme la diferencia entre ctrl + z y ctrl + c ?

Cuando estoy en el terminal, ambas combinaciones detienen el proceso actual, pero ¿cuál es exactamente la diferencia entre ambos?

    
pregunta chaitanya lakkundi 13.08.2014 - 15:50

6 respuestas

130

Si dejamos las cajas de borde a un lado, la diferencia es simple. Control + C anula la aplicación casi de inmediato, mientras que Control + Z la desvía hacia el fondo, suspendida.

El shell envía diferentes señales a las aplicaciones subyacentes en estas combinaciones:

  • Control + C (carácter de control intr ) envía SIGINT que interrumpirá la aplicación. Por lo general, hace que aborte, pero esto depende de la aplicación para decidir.

  • Control + Z (carácter de control susp ) envía SIGTSTP a una aplicación en primer plano, colocándolo en un segundo plano, suspendido. Esto es útil si necesita salir de algo como un editor para obtener algunos datos que necesita. Puede volver a la aplicación ejecutando fg (o %x donde x es el número de trabajo como se muestra en jobs ).

    Podemos probar esto ejecutando nano TEST , luego presionando Control + Z y luego ejecutando ps aux | grep TEST . Esto nos mostrará que el proceso nano aún se está ejecutando:

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

    Además, podemos ver (a partir de esa T, que está en la columna de estado) que el proceso se ha detenido . Entonces todavía está vivo, pero no se está ejecutando ... Se puede reanudar.

    Algunas aplicaciones se bloquean si tienen procesos externos en curso (como una solicitud web) que podrían agotar el tiempo de espera mientras duermen.

respondido por el Oli 13.08.2014 - 15:56
14

Control + Z suspende un proceso ( SIGTSTP ) y Control + C interrumpe un proceso ( SIGINT )

enlace

  

En sistemas tipo Unix, Control + Z es la asignación de teclado predeterminada más común para la secuencia de teclas que suspende un proceso

enlace

  

En los sistemas POSIX, la secuencia hace que el programa activo reciba una señal SIGINT. Si el programa no especifica cómo manejar esta condición, se termina. Normalmente, un programa que maneja un SIGINT se terminará a sí mismo, o al menos terminará la tarea que se ejecuta dentro de él

    
respondido por el Sleep Deprived Bulbasaur 13.08.2014 - 15:56
10

Ctrl + C se usa para matar un proceso con la señal SIGINT , por otras palabras es matar .

Ctrl + Z se usa para suspender un proceso enviándole la señal SIGSTOP , que es como una señal de reposo, que puede ser deshacer y el proceso puede reanudarse nuevamente.

Sin embargo, cuando se suspende un proceso, podemos reanudarlo nuevamente en fg (resume in forground) y bg (resume in background) , pero no puedo reanudar un proceso inactivo, eso es una diferencia entre utilizar Ctrl + C & amp; Ctrl + Z .

¿Cómo ver el proceso suspendido?

Al usar el comando jobs, la salida será:

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

¿Cómo matar un proceso suspendido en segundo plano?

Al usar el comando kill :

kill% n donde n se mostrarán los números en el comando jobs, por lo que quiero matar a cat: kill %1 .

    
respondido por el nux 14.08.2014 - 09:49
6

Esto debería ayudar

  

Ctrl + Z se utiliza para suspender un proceso enviándole la señal SIGSTOP, que no puede ser interceptada por el programa. Mientras Ctrl + C se usa para matar un proceso con la señal SIGINT, y puede ser interceptado por un programa para que pueda limpiarse antes de salir, o no salir en todo.

    
respondido por el Graham 13.08.2014 - 15:58
3

cuando presionas ctrl + c , significa que envías SIGINT a tu proceso. como escribe este comando: kill -SIGINT <your_pid> . Te matará tu proceso. Por eso no puede verlo cuando se ejecuta el comando ps .
Cuando presionas ctrl + z , significa que envías SIGSTOP a tu proceso. como escribe este comando: kill -SIGKSTOP <your_pid> . Se detendrá su proceso, pero el proceso sigue vivo. Entonces puede reactivar su proceso enviando SIGCONT a su proceso.

    
respondido por el P_O_I_S_O_N 14.08.2014 - 09:24
3

Para decirlo simplemente:

  • CTRL - C solicita que el programa aborte .

  • CTRL - Z fuerza al programa a suspender y pasar al fondo .

    Esto le permite reanudarlo más tarde con el comando fg . Las tareas de fondo restantes se eliminan cuando sale del shell de inicio de sesión.

respondido por el thomasrutter 15.08.2014 - 02:39

Lea otras preguntas en las etiquetas