Cuando trato de detener algo, lo uso ^C
y, a veces, ^D
en la terminal.
¿Cuál es la diferencia entre los dos? Por qué algún programa no responde ^C
, pero ^D
. ¿Por qué Terminal.app simplemente se cierra cuando lo uso ^D
?
Cuando trato de detener algo, lo uso ^C
y, a veces, ^D
en la terminal.
¿Cuál es la diferencia entre los dos? Por qué algún programa no responde ^C
, pero ^D
. ¿Por qué Terminal.app simplemente se cierra cuando lo uso ^D
?
Respuestas:
CtrlCle dice a la terminal que envíe un SIGINT
proceso al primer plano actual, que por defecto se traduce en la finalización de la aplicación. CtrlDle dice al terminal que debe registrar un EOF en la entrada estándar, que bash interpreta como un deseo de salir.
Ctrl+ D( ^D
) significa el final del archivo . Solo funciona al comienzo de una línea (estoy simplificando un poco), y no tiene ningún efecto si el programa no está leyendo la entrada del terminal. En su experimento, ^D
le dijo al shell que no iba a escribir más comandos, por lo que salió; entonces la terminal salió porque su subprograma había terminado.
Ctrl+ C( ^C
) significa "interrumpir", es decir, detener lo que estás haciendo. Técnicamente, al presionar se ^C
envía la señal INT , que de forma predeterminada finaliza una aplicación, pero que en muchos programas significa volver al nivel superior (por ejemplo, en un shell, dejar de escribir una línea de comando y volver a un mensaje prístino).
Si un programa no responde ^C
, puede intentar Ctrl+ \( ^\
). Esto envía la señal QUIT , que por defecto termina una aplicación, y que no interceptan tantos programas.
Otra tecla que envía una señal es Ctrl+ Z( ^Z
). Envía la señal TSTP , que detiene el programa que se ejecuta en primer plano. (TSTP es la abreviatura de "parada terminal"; es similar a STOP pero TSTP puede ignorarse mientras que STOP no puede). Desde el shell, puede reanudar la ejecución de ese programa con el fg
comando (reanudar en primer plano) o el bg
comando (reanudar en el antecedentes).
Todas estas teclas se pueden cambiar con el stty
comando. Algunos programas, particularmente los programas de pantalla completa que tienen combinaciones de teclas, los deshabilitan.
KeyboardInterrupt
? Se cierra con ctrl + d (si está al principio de una línea) y con ctrl + \.
Agregando a las 2 respuestas realmente buenas anteriores, aquí hay un ejemplo:
Si escribe python
en el shell, lo lleva al indicador >>> de python.
Ahora, si golpeas Ctrl+C
, dirá KeyboardInterrupt
y permanecerá en el >>>.
Si se entra en un bucle, por ejemplo, escribiendo for x in (text):
espera para que escriba más allá al mostrar una pronta ..., si se golpea Ctrl+C
ahora, que va a salir de la instrucción for y el retorno a la pronta >>>
Si usted golpea Ctrl+D
en cualquier momento, ya sea en >>> o ... saldrá del indicador de Python y volverá al shell original.
Del mismo modo, si ssh'ed en otra máquina, a Ctrl+C
terminará cualquier comando existente, Ctrl+D
lo hará y también saldrá de la máquina. (Además, la Delete
clave es lo mismo que hacer un Ctrl+D
)