Efecto de Ctrl-S / XOFF en el proceso
Mientras estaba corriendo apt upgrade, accidentalmente envié un Ctrl- Sa esa ventana de terminal.
Ahora que conozco XOFF, XON, Ctrl- Q, y algo nuevo acerca de 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 generalmente en cualquier comando que recibe un XOFF. htopdeja de actualizar la pantalla, que es algo bueno saber, pero htoptodavía se está ejecutando?
¿ aptSeguía corriendo? ¿O era apty htopefectivamente detenido, congelado?
Aparentemente, los procesos aún pueden recibir entrada, mientras que XOFF'd, por lo que aún se están ejecutando.
¿Qué está pasando? Por ejemplo, el contador de programa, aparentemente no deja de incrementar el contador de programa, congelando el programa.
¿Depende de cómo esté programado el comando para manejar XOFF? ¿Existe un comportamiento general que se pueda esperar con los comandos básicos de Linux?
Respuestas
htopdeja de actualizar la pantalla, lo cual es bueno saber, perohtopaún se está ejecutando [después de ingresar Ctrl-S]?
Si, absolutamente. htopu otro comando NO es detenido o congelado por 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 la pantalla del primer terminal. Si en lugar de cates un shell y esos son comandos como rm ..., se ejecutarán sin tener que ser repetidos 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 una gran cantidad de salida (o la ECHOconfiguración de termios está activada --por defecto-- y sigue recibiendo una gran cantidad de entradas), cualquier escritura (o lectura respectiva) al terminal se bloqueará en algún punto hasta que se reciba Ctrl-Q.
Como ya sabrá, XONy XOFF, ligados a Ctrl+ Sy Ctrl+ Qde forma predeterminada, son caracteres de control de flujo de software y, en principio, son reliquias de los viejos tiempos de los terminales de teletipo de impresión de papel . Se utilizaron en momentos en que un equipo receptor (a menudo una impresora de papel) a veces no podía seguir el ritmo de la entrada enviada por un remitente remoto.
Hoy en día, los teletipos en papel ya no se utilizan, pero la idea detrás de ellos todavía se conserva en el marco de software de un "terminal" (ver, por ejemplo, aquí y este artículo muy agradable sobre la historia del TTY ), que heredó y aún implementa algunos de los conceptos utilizados en los terminales originales basados 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 pseudo-terminal, no llega a ver los caracteres XONy XOFF, ya que son capturados por defecto por el terminal, donde el comportamiento estándar XOFFes dejar de imprimir la salida. recibe del programa. El programa en sí no se ve afectado y continúa ejecutándose en segundo plano, solo que la salida no se "envía hacia adelante" al usuario hasta que XONse reciba 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 de software a través de la IXOFFbandera (ver aquí, por ejemplo ); lo nanohace , por ejemplo.