Algunas herramientas de interfaz de línea de comando devuelven una consola rota cuando se cancela CTRL+C. A veces el texto es invisible o hay problemas gráficos hasta que ejecuto el comando reset.
(Uso bash, pero espero que sea independiente del shell).
¿Este efecto tiene un nombre? ¿Qué causa esto y cómo pueden los programadores prevenir esto en las herramientas? ¿Existe una estrategia para abordar este problema en los principales lenguajes de programación?
command-line
console
kill
crash
Jonas Stein
fuente
fuente

stty sanepara las barbas grisesRespuestas:
Una consola a veces necesita un
reset(1)(o algúnstty(1)comando) porque el estado de un pseudo-terminal no cambia cuando finaliza algún proceso (por ejemplo, un programa iniciado por su shell).Lee el tty desmitificado .
(Encuentro que el manejo de pseudo-terminales y pseudottys es la parte más difícil de Linux)
Un programa de buen comportamiento que trate con el terminal y cambie su modo o disciplina de línea debería esforzarse por evitar fallas y emitir las llamadas apropiadas (ver termios (3) ) para poner el terminal en el estado correcto. Por cierto, las bibliotecas como ncurses o readline son útiles (pero debe llamar a sus rutinas de limpieza adecuadamente).
Ver señal (7) y señal de seguridad (7) . Evitar fallas en tu código es difícil. Lea sobre el comportamiento indefinido .
Una solución imperfecta podría ser definir una función de shell que ejecute su programa y luego haga un
reset(que a veces puede ser inapropiado).fuente
resetpuede dar lugar asttyconfiguraciones diferentes de las originales.stty -a > /tmp/test1en bash y luego un comando, que cancelé. El color del terminal ahora era rojo.stty -a > /tmp/test2perotest1ytest2eran exactamente lo mismo.Responder a este problema no es completamente independiente de la shell. En zsh, está el
ttyctlincorporado, que puede "congelar" o "descongelar" el modo tty. No creo que haya un equivalente en bash. Elsettycomando en tcsh hace lo mismo, pero más detallado: puede congelar configuraciones individuales.Congelar el modo tty solo significa que zsh recordará el modo actual, y si algún futuro hijo lo cambia, el modo se restaurará cuando el hijo suspenda o finalice.
Esto lo protegerá de algunos de los efectos negativos de los programas que se bloquean o que de otra manera no limpian el terminal. Debe recordar descongelar si desea realizar un cambio
stty, de lo contrario, el shell se deshará inmediatamente de lo que hayasttyhecho.resethace más que restablecersttymodos, por lo que aún puede necesitarlo a veces, pero no con frecuencia.fuente