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


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

Esta pregunta fue una Pregunta del Superusuario de la semana.
  Lea el 13 de marzo de 2011 Entrada de blog para más detalles o envía tu propio Pregunta de la semana.


177


origen




Respuestas:


Controlar+Z se usa para suspender un proceso enviándole la señal SIGSTOP, que no puede ser interceptado por el programa. Mientras Controlar+do se usa para matar un proceso con la señal SIGINTy puede ser interceptado por un programa para que pueda limpiarse antes de salir o no salir.

Si suspende un proceso, aparecerá en el intérprete de comandos para informarle que se ha suspendido:

[1]+  Stopped                 yes

Sin embargo, si matas a uno, no verás ninguna confirmación que no sea devuelta a un aviso de shell. Cuando suspendes un proceso, también puedes hacer cosas de lujo con él. Por ejemplo, ejecutando esto:

fg

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

Y ejecutando el comando

bg

Si se suspende un programa, este se ejecutará en segundo plano (sin embargo, la salida del programa irá al TTY).

Si quieres matar a un programa suspendido, no tienes que volver a traerlo fg primero, simplemente puedes hacer el comando:

kill %1

Si tiene múltiples comandos suspendidos, ejecutándose

jobs

los enumerará, así:

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

Utilizando %#, dónde # es el número de trabajo (el que está entre corchetes del jobs salida) con bg, fg, o kill, se puede usar para hacer la acción en ese trabajo.


234



Puede cambiar qué teclas hacen qué trabajo utilizando el stty mando. Por ejemplo stty susp ^Z  o stty intr ^C. - RedGrittyBrick
En realidad, envía SIGTSTP, que puede ser interceptado. - Simon Richter
¡Guay! Entonces, si un programa se niega a morir con Ctrl + C, ¿cómo se fuerza a matarlo? - Aditya M P
@adityamenon Encuentra el nombre del ejecutable, por ejemplo amarok y correr killall amarok, o corre ps aux y encuentra la identificación del proceso al lado del nombre del ejecutable y ejecuta kill {process id}. - Bruno Finger


Ctrl + Z suspende el proceso con SIGTSTP, puede reanudarlo más tarde. Ctrl + C cancela el proceso con SIGINT, que finaliza el proceso a menos que el objetivo lo maneje / ignore, por lo que no puede reanudarlo. También hay un SIGSTOP que puede ser enviado por kill() y que el proceso no puede interceptar. SIGCONT es la contraparte tanto de SIGSTOP como de SIGTSTP que no suspende el proceso.


22



No, eso es SIGTSTP, no SIGSTOP y puede ser interceptado. - sch
@sch, ¿es correcto ahora? - Ben Voigt
Sí, aunque Ctrl-Z (y CTRL-C) causa un proceso grupo (el grupo de proceso en primer plano del terminal) para recibir esa señal, no necesariamente solo un proceso. También tenga en cuenta que SIGTTIN y SIGTTOU se envían a procesos que no están en el grupo de procesos en primer plano de la terminal cuando luego intentan leer o escribir desde / hacia ella, que también los suspenden. - sch
@sch: ¿No es el proceso vs grupo solo una diferencia en cómo se envía la señal? IIRC kill() te permite enviar SIGSTOP a un grupo bien. - Ben Voigt
Sí, mi comando era sobre tu CTRL-Z suspende el proceso ... lo que puede inducir a error a las personas a pensar que se envía a un solo proceso cuando en realidad es un trabajo o grupo de proceso. - sch


CTRL + Z detiene (pausa) un trabajo

CTRL + C termina un trabajo

con CTRL + C no puede reanudar el proceso, pero con CTRL + Z el trabajo se puede reanudar simplemente ingresando en el comando promt:

fg %1

si tiene varios procesos en pausa, entonces debe hacer

jobs

para ver el resultado y seleccionar el número apropiado para reanudar, p.

fg %3

reanuda el tercer trabajo en la lista. También puede tener trabajos ejecutándose en segundo plano

bg %n

donde n es el número de trabajo.


17



Eso es trabajos (grupos de procesos), no procesos con los que se enfrentan CTRL-C, CTRL-Z, fg y bg. - sch


Cntrl + Z pause the currently running process. 

Y

Cntrl + C simply terminates the running process.

Con Cntrl + C no puede reanudar el proceso. donde al usar Cntrl + Z puede reanudar el proceso.

use fg% 1 para reanudar el proceso.


3





CTRL+Z detiene (pausa) un trabajo

CTRL+dotermina un trabajo

Con CTRL+do no puede reanudar el proceso, pero con CTRL+Z el trabajo se puede reanudar simplemente ingresando en el símbolo del sistema:

fg% 1

Si tiene varios procesos en pausa, entonces debe hacer

trabajos

para ver la salida.


3





Las respuestas anteriores son correctas, pero por alguna razón desconocida, Ctrl-Z también suspende todos los procesos secundarios, pero killall -SIGSTOP ... solo suspende el proceso frontal (padre) y deja a los niños para que se ejecuten como quieran.


2