Этот вопрос больше для моего личного любопытства, чем что-либо важное.Я стараюсь, чтобы весь мой код был совместим хотя бы с Windows и Mac.До сих пор я узнал, что должен основывать свой код на POSIX, и это просто замечательно, но ...
В Windows нет функции sigaction
, поэтому используется signal
?Согласно: В чем разница между сигналом и сигналом? Есть некоторые проблемы с сигналом.
- Функция signal () не блокирует поступление других сигналов во времятекущий обработчик выполняется;sigaction () может блокировать другие сигналы до тех пор, пока не вернется текущий обработчик.
- Функция signal () сбрасывает действие сигнала обратно в SIG_DFL (по умолчанию) для почти всех сигналов.Это означает, что обработчик signal () должен переустановить себя в качестве первого действия.Он также открывает окно уязвимости между моментом обнаружения сигнала и переустановкой обработчика, в течение которого, если поступает второй экземпляр сигнала, происходит поведение по умолчанию (обычно завершается, иногда с предубеждением - иначе дамп ядра).
Если два SIGINT приходят быстро, приложение завершает работу по умолчанию.Есть ли способ исправить это поведение?Какие еще последствия имеют эти две проблемы для процесса, который, например, хочет заблокировать SIGINT?Есть ли другие проблемы, с которыми я могу столкнуться при использовании сигнала?Как мне их исправить?