Определить, какой сигнал вызвал EINTR?
Я выполняю цикл epoll, и иногда мой вызов epoll_wait возвращает -1 с errno, установленным в EINTR. Иногда я хочу, чтобы это завершило цикл epoll, как в случае с SIGTERM или SIGINT. Но у меня есть этот код, скомпилированный с флагом -pg, поэтому периодически появляются сигналы SIGPROF (27), которые останавливают мой цикл.
Итак... возможно ли включить сигнум, чтобы я мог определить, когда выходить или продолжать? Я хотел бы избегать всего, что использует глобальное использование для отслеживания самого последнего запущенного сигнала.
1 ответ
Решение
Добавьте обработчики сигналов на SIGTERM и SIGINT. Внутри этих обработчиков вы устанавливаете переменную, которую вы проверяете в основном цикле epoll