Я хочу, чтобы справиться, если epoll_wait
была прервана по какой-либо причине (например, с помощью SIGINT)Dont прекратить программу в epoll_wait
while (true) {
n = epoll_wait (epoll_fd, events, max_events, -1);
if (errno == EINTR) {
...
}
}
Но отладчик даже не пошел в if
. Программа была прекращена в epoll_wait
. Я добавил некоторую магию:
signal (SIGINT, placebo);
while (true) {
n = epoll_wait (epoll_fd, events, max_events, -1);
if (errno == EINTR) {
...
}
}
И все работает как ожидалось. Но это уродливо. Каков правильный способ позволить мне обработать любое прерывание epoll_wait
?
'epoll' не волшебным образом сожрает сигналы. Вы все еще должны сами обрабатывать сигналы. Однако я рекомендую signalfd. –
Действие по умолчанию для большинства сигналов (включая 'SIGTERM') - это прекращение процесса. Итак, в первом случае вы просто наблюдаете за ожидаемым поведением. – alk