A menudo empiezo a leer un archivo enorme y luego quiero salir después de un tiempo, pero hay un retraso al presionar
Ctrl+ Cpara que el programa se detenga. ¿Hay alguna posibilidad de acortar el retraso presionando la tecla Ctrl+ Cvarias veces? ¿O estoy malgastando mis pulsaciones de teclas?
41
bash
, pero no es el caso en elzsh
que siempre cierra el padre. Es una de las razones que me gustanzsh
.^C
cuando registre la prensa (al menos bash sí)Respuestas:
Después del primero Ctrl-C, el programa recibirá
SIGINT
y generalmente comenzará a limpiar (eliminar archivos tmp, cerrar sockets, etc.). Si golpea de Ctrl-Cnuevo mientras eso está sucediendo, puede suceder que interrumpa la rutina de limpieza (es decir, se podría actuar sobre la señal adicional en lugar de quedarse sola), dejando un desastre. Si bien esto generalmente no es el caso, más comúnmente las señales adicionales se envían despuésel proceso finalizó (debido a los retrasos inherentes en la interacción del operador con el sistema). Eso significa que las señales son recibidas por otro proceso (a menudo shell, pero no siempre). Si ese destinatario no maneja esta señal correctamente (como suele hacer Shell, vea la respuesta de Jenny D), puede que le sorprenda desagradablemente el resultado de tal acción.fuente
INT
que el proceso recibe.trap "sleep 20 || echo clean up cancelled!" EXIT ; sleep 10
. Ejecute el script y presione ctrl-C dos veces. Verá que el segundo ctrl-C se pasa a la rutina de "limpieza" (en la instrucción trap) y finaliza susleep
comando.trap "sleep 20 || echo clean up cancelled!; sleep 10; echo 'but continued'" EXIT ; sleep 10
son solo lossleep
comandos los que reciben las señales. Ambos estábamos equivocados xDisig
está activado, en cuanto CTRL-C es presionado y recibido por el núcleo (para un emulador de terminal, tan pronto como el emulador de terminal lo escribe en el lado maestro del pseudo-terminal), la señal SIGINT se envía a todos los procesos en el grupo de procesos en primer plano de la terminal. Puede estar bloqueado allí, pero no se entregará más tarde a otro proceso. Incluso si el búfer del dispositivo terminal está lleno (las aplicaciones no han leído nada de lo que escribió), el CTRL-C saltará la cola.Los estás desperdiciando. Todo lo que sucede es que una vez que el servidor termina con la salida de la pantalla, recibirá múltiples Ctrl-C. El primero se usará para matar el proceso, y los siguientes terminarán en su shell, que luego se verá como
fuente
Respuesta corta : si el proceso reacciona a él.
Respuesta larga : cuando presionas ctrl+ cel kernel envía una señal al proceso. Qué señal se puede determinar mediante el siguiente comando:
Vea la página de manual de
stty
:Es la señal
INT
, también conocida como número 2. Cuando el proceso tiene un controlador de señal, puede reaccionar a esto. La mayoría de los procesos realizan algunos trabajos de limpieza para finalizar con éxito.fuente
kernel
(la disciplina de línea del terminal, el controlador del terminal) que envía SIGINT a cada proceso en el grupo de procesos en primer plano del terminal.Tienes razón. Las pulsaciones de teclas se están desperdiciando. Cuando presiona Crtl+Cy se detecta, hay recursos que deben borrarse, por lo que lleva tiempo. El único caso posible que sé donde Ctrl+Cse requiere presionar es cuando desea cancelar un proceso de actualización de Yum, donde Yum requiere que presione Ctrl+Cdos veces para confirmar que realmente desea cancelar.
fuente
Aunque solo uno Ctrl-Ces necesario en el caso general, hay algunas situaciones en las que puede ser necesario. Python, por ejemplo, atrapa Ctrl-Ccuando se genera un nuevo subproceso, por lo que si algo sale mal al iniciar muchos subprocesos, es necesario volver a enviarlo varias veces para que pueda pasar al
python
proceso principal sin ser atrapadofuente
Yo siempre tiene que pulsar Ctrlcvarias veces. Nunca he tenido que responder en la primera pulsación, y tengo que usarlo varias veces hasta que el sistema realmente se da cuenta de que hay un Ctrlcenvío. Parece que en realidad se pierde / pierde la mayoría de ellos.
fuente