Необходимо вызвать ioctl(tty0_fd, KDSETMODE, KD_TEXT) при аварийном завершении
Я использую кадровый буфер Linux в своем приложении и настройку ioctl(tty0_fd, KDSETMODE, KD_GRAPHICS)
для предотвращения отображения курсором или текстом нижележащего терминала, а затем очистки после обычного завершения программы.
Но оставаясь в KD_GRAPHICS
Режим после аварийного завершения - плохая вещь, поскольку он не отвечает системе, и мне интересно, как устранить это условие.
Функции, зарегистрированные с atexit()
вызываются только после нормального завершения, так что это не поможет. Я мог бы зарегистрировать свои собственные обработчики для любых сигналов, которые могут убить приложение, но SIGKILL
не может быть пойман в ловушку.
Как оконные среды и другие программы справляются с этой ситуацией?
1 ответ
Один из вариантов — создать процесс, который живет независимо от вашего основного процесса и действует как своего рода сторожевой таймер. Когда он обнаруживает, что ваш процесс завершился, он восстанавливает режим терминала.