Восстановление настроек терминала (termios) в обработчике сигналов

В коде, который изменяет настройки терминала (он встраивает python, который, в свою очередь, использует некоторые модули управления терминалами), измененное состояние сохраняется после того, как я завершаю работу через Ctrl-\ отправляя SIGQUIT процессу.

Безопасно ли сохранять настройки терминала при запуске, а затем зарегистрировать обработчик SIGQUIT, который их восстановит? Если не безопасно, что может произойти в худшем случае?

1 ответ

Решение

Обработчики сигналов обычно должны быть скудными и не выполнять много работы. Вы не должны вызывать не асинхронно-безопасные функции из обработчика сигнала. Асинхронно-сигнальные безопасные функции. Таким образом, если ваш код termios содержит функции, отличные от AS, восстановление настроек терминала из обработчика сигналов не рекомендуется (хотя вы будете обрабатывать SIGQUIT)

Как насчет этого:

fork() указан как безопасный на странице руководства signal, Почему бы не раскошелиться на дочерний процесс, execv другая программа которая восстановит настройки?

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