Um console às vezes precisa de um reset(1)
(ou algum stty(1)
comando) porque o estado de um pseudo-terminal não muda quando algum processo (por exemplo, um programa iniciado pelo seu shell) termina.
Leia o tty desmistificado .
(eu acho o manuseio de pseudo-terminais e pseudottys a parte mais difícil do Linux)
Is there a strategy how this problem is addressed in the major programming languages?
Um programa bem-comportado lidando com o terminal e mudando seu modo ou disciplina de linha deve tentar evitar quebras e emitir as chamadas apropriadas (veja termios(3) ) para colocar o terminal no estado certo. BTW, bibliotecas como ncurses ou readline são úteis (mas você precisa chamar as rotinas de limpeza apropriadamente).
Veja sinal (7) e sinal-segurança (7) . Evitar bater em seu código é difícil. Leia sobre comportamento indefinido .
Uma solução imperfeita poderia ser definir uma função de shell que executa seu programa, em seguida, faz um reset
(que às vezes pode ser inadequado).