Usuario del software
2011-03-27 00:39:57 +0000 2011-03-27 00:39:57 +0000
191

¿Qué diferencia hay entre Ctrl+Z y Ctrl+C en la línea de comandos de Unix?

Estoy usando la terminal de Mac OS X. Y uso Ctrl+Z o Ctrl+C para detener algunos programas. Pero me di cuenta de que no sé qué están haciendo exactamente. ¿Qué son y cuál es la diferencia entre ellos?

Esta pregunta fue una * Pregunta del Super Usuario de la Semana . Lea la * entrada de blog del 13 de marzo de 2011 para más detalles o * envíe su propia ** Pregunta de la Semana.

Respuestas [6]

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

Control+Z se utiliza para suspender un proceso enviándole la señal SIGSTOP, que no puede ser interceptada por el programa. Mientras que Control+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 absoluto.

Si se suspende un proceso, éste aparecerá en el shell para indicar que ha sido suspendido:

[1]+ Stopped yes

Sin embargo, si se mata uno, no se verá ninguna confirmación más que ser devuelto a un prompt del shell. Cuando suspendes un proceso, puedes hacer cosas extravagantes con él, también. Por ejemplo, ejecutar esto:

fg

Con un programa suspendido lo traerá de vuelta al primer plano.

Y ejecutar el comando

bg

Con un programa suspendido le permitirá ejecutarse en segundo plano (aunque la salida del programa seguirá yendo al TTY).

Si quieres matar un programa suspendido, no tienes que traerlo de vuelta con fg primero, puedes simplemente hacer el comando:

kill %1

Si tienes múltiples comandos suspendidos, ejecutando

jobs

los listará, así:

[1]- Stopped pianobar
[2]+ Stopped yes

Usando %#, donde # es el número de trabajo (el que está entre corchetes de la salida de jobs) con bg, fg, o kill, puede ser usado para hacer la acción en ese trabajo.

255
22
2011-03-27 00:43:15 +0000

Ctrl+Z suspende el proceso con SIGTSTP, puede reanudarlo más tarde. Ctrl+C mata el proceso con SIGINT, lo que termina el proceso a menos que sea manejado/ignorado por el objetivo, así que no puedes reanudarlo. También hay un SIGSTOP que puede ser enviado por kill() y que el proceso no puede interceptar. SIGCONT es la contrapartida tanto de SIGSTOP como de SIGTSTP que anula el proceso.

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

CTRL+Z detiene (pausa) un trabajo

CTRL+C termina un trabajo

con CTRL+C no se puede reanudar el proceso pero con CTRL+Z se puede reanudar el trabajo con sólo introducir en el comando promt:

fg %1

si tienes múltiples procesos en pausa entonces debes hacer

jobs

para ver la salida y seleccionar el número apropiado para reanudar e. g.

fg %3

reanuda el tercer trabajo de la lista. También puede tener trabajos que se ejecutan en segundo plano con

bg %n

donde n es el número de trabajo.

18
3
2014-07-03 15:57:10 +0000

CTRL+Z detiene (pausa) un trabajo

CTRL+C termina un trabajo

Con CTRL+C no se puede reanudar el proceso, pero con CTRL+Z se puede reanudar el trabajo con sólo introducir en la línea de comandos:

fg %1

Si tiene múltiples procesos en pausa entonces debería hacer

trabajos

para ver la salida.

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

y

Cntrl + C simply terminates the running process.

Utilizando Cntrl + C no se puede reanudar el proceso. donde como usando Cntrl + Z se puede reanudar el proceso.

usa fg %1 para reanudar el proceso.

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

Las respuestas anteriores son correctas, pero por alguna razón desconocida Ctrl-Z suspende todos los procesos del niño también, pero killall -SIGSTOP ... sólo suspende el proceso frontal (padre) y deja a los niños correr como quieran.

2