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

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

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


person eudoxos    schedule 21.10.2016    source источник


Ответы (1)


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

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

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

person Prabhu    schedule 21.10.2016
comment
Полезный ответ, но я не понимаю первую часть: выходит за рамки вашей программы?? Откуда вы знаете? Это полностью в рамках, потому что другая его часть в первую очередь меняет настройки терминала. - person eudoxos; 21.10.2016
comment
Нет. Я имел в виду, что изменения сохранятся даже после завершения программы. Я просто повторил то, что вы упомянули. Удалили эти заявления - person Prabhu; 21.10.2016