Efecto de Ctrl-S / XOFF en el proceso

Efecto de Ctrl-S / XOFF en el proceso

Mientras estaba ejecutando, apt upgradeaccidentalmente envié un Ctrl- Sa esa ventana de terminal.

Ahora conozco XOFF, XON, Ctrl- Qy algo nuevo sobre el teletipo.

Cuando envié un Ctrl- Qal terminal "en pausa", aptcontinuó con su trabajo.

Al leer sobre XOFF, no me queda claro qué sucedió en apt, o qué sucede en general en cualquier comando que recibe un XOFF. htopdeja de actualizar la pantalla, lo cual es bueno saber, pero ¿ htopsigue funcionando?

¿Seguiba aptcorriendo? ¿O fue aptefectivamente htoppausado, congelado?

Aparentemente, los procesos aún pueden recibir entradas, mientras están XOFFen 'd', por lo que todavía se están ejecutando.

¿Lo que está sucediendo? Por ejemplo, el contador del programa, aparentemente no deja simplemente de incrementar el contador del programa, congelando el programa.

¿Depende de cómo esté programado el comando para manejar XOFF? ¿Existe algún comportamiento general que se pueda esperar con los comandos básicos de Linux?

Notaesoestey preguntas similares no contienen respuestas a mi pregunta ya que no mencionan lo que sucede en el programa en sí. Por ejemplo, no sé si aptcontinuó ejecutándose en silencio o si estuvo congelado/pausado.

Respuesta1

Como ya sabrás, XONy XOFF, vinculados a Ctrl+ Sy Ctrl+ Qde forma predeterminada, estáncontrol de flujo de softwarepersonajes y en principio reliquias de laViejos tiempos de terminales de teletipo que imprimían papel.. Se utilizaban en ocasiones en las que un equipo receptor (a menudo una impresora de papel) no podía seguir el ritmo de la entrada enviada por un remitente remoto.

Hoy en día ya no se utilizan teletipos en papel, pero la idea detrás de ellos todavía se conserva en el marco del software de un "terminal" (ver, por ejemplo,aquíyeste muy buen artículo sobre la historia del TTY), que heredó y aún implementa algunos de los conceptos utilizados en los terminales originales en papel, uno de los cuales es la capacidad de interpretar caracteres de control de flujo.

Por lo general, un programa que se ejecuta "en la consola", es decir, conectado a un pseudoterminal, no puede ver los caracteres XONy, XOFFya que el terminal los detecta de forma predeterminada, donde el comportamiento estándar es XOFFdejar de imprimir la salida. recibe del programa. Por lo demás, el programa en sí no se ve afectado y continúa ejecutándose en segundo plano, solo que la salida no se "envía" al usuario hasta que XONse recibe nuevamente.

Si escribe un programa y desea recibir explícitamente estos caracteres de entrada, puede usar la tcsetattr()llamada al sistema en su programa para deshabilitar el control de flujo del software a través de la IXOFFbandera (consulteaquí, por ejemplo) -nanohace eso, Por ejemplo.

Respuesta2

htopdeja de actualizar la pantalla, lo cual es bueno saber, pero htoptodavía se está ejecutando [después de ingresar Ctrl-S]?

Si, absolutamente. htopu otro comando NO se detiene ni congela con Ctrl-S.

La IXONconfiguración de termios no funciona como ISIG. Escribir los caracteres VSTOP(Ctrl-S) o VSTART(Ctrl-Q) NO envía ninguna señal al proceso que se ejecuta en la terminal.

Es muy fácil comprobarlo; abrir dos terminales: en la primera entrar

tail -f /tmp/file

y en el segundo

cat > /tmp/file

Ahora, en la segunda terminal, escriba Ctrl-S, luego siga escribiendo líneas a ciegas seguidas de Enter. Aparecerán en pantalla en el primer terminal. Si en lugar de cateso es un shell y esos son comandos como rm ..., se ejecutarán sin tener que repetirse en la pantalla.

lo que sucede generalmente en cualquier comando que recibe un XOFF.

El comando no "recibe un XOFF". Todo se maneja dentro del controlador de la terminal. Desde el punto de vista de la aplicación no pasa nada. Si el programa sigue enviando abundantes resultados (o la ECHOconfiguración de termios está activada, la opción predeterminada, y sigue recibiendo abundantes datos), cualquier escritura (o lectura respectiva) en el terminal se bloqueará en algún momento hasta que se reciba Ctrl-Q.

información relacionada