Страницы

Поиск по вопросам

вторник, 7 января 2020 г.

Сигналы Linux для обработки событий - моветон?

#linux #c #signal


В Linux-системе программа делает popen(). Подскажите, пожалуйста, будет ли считаться
нормальной практикой использовать механизм сигналов, чтобы сообщить некритическую информацию
из потомка (в частности, сделать на этой основе обработчик нажатия кнопки)? Это, конечно,
плохомасштабируемое решение, пользовательские сигналы быстро закончатся, но может ли
оно иметь место при каких-то условиях?
    


Ответы

Ответ 1



Я не спец в Linux-платформе, но на мой вкус, есть более адекватные средства IPC. Да хотя бы расшарить pipe (один или несколько) с потомком и общаться через него. А так вообще, всё что решает задачу, соответствует спецификации и не содержит багов есть решение, вне зависимости от его изящества.

Ответ 2



Сигналы могут приходить когда угодно, разрывая код в любом месте. И мутексы не помогают. Нужно очень аккуратно программировать функции, принимающие сигналы. Почитайте man 7 signal, в особенности после подзаголовка Async-signal-safe functiuons. Также сигналы можно принимать через файловый дескиптор, но зачем городить, если есть pipe. Многие демоны и некоторые утилиты (например dd) принимают SIGUSR1, SIGUSR2, SIGHUP для управления (перечитать конфиг, выдать статистику).

Ответ 3



чтобы сообщить некритическую информацию IMHO, для этих целей гораздо проще и адекватнее использовать механизм сообщений (POSIX или System-V).Да и именованые каналы (pipe) отлично для этого подходят.

Комментариев нет:

Отправить комментарий