Необходимо вызвать ioctl(tty0_fd, KDSETMODE, KD_TEXT) при аварийном завершении

Я использую кадровый буфер Linux в своем приложении и настройку ioctl(tty0_fd, KDSETMODE, KD_GRAPHICS) для предотвращения отображения курсором или текстом нижележащего терминала, а затем очистки после обычного завершения программы.

Но оставаясь в KD_GRAPHICS Режим после аварийного завершения - плохая вещь, поскольку он не отвечает системе, и мне интересно, как устранить это условие.

Функции, зарегистрированные с atexit() вызываются только после нормального завершения, так что это не поможет. Я мог бы зарегистрировать свои собственные обработчики для любых сигналов, которые могут убить приложение, но SIGKILL не может быть пойман в ловушку.

Как оконные среды и другие программы справляются с этой ситуацией?

1 ответ

Один из вариантов — создать процесс, который живет независимо от вашего основного процесса и действует как своего рода сторожевой таймер. Когда он обнаруживает, что ваш процесс завершился, он восстанавливает режим терминала.

Другие вопросы по тегам