我使用多個線程處理應用程序。其中一個用於epoll。這個應用程序還捕獲SIGINT
信號並執行一些定稿。一切工作理想,直到我設置_GNU_SOURCE
宏。這使得程序來卡住就行了:_GNU_SOURCE宏和epoll_wait行爲
int n = epoll_wait(epfd, events, N, -1);
因此,設置_GNU_SOURCE
阻止所有(recv
太)從打破SIGINT
等待呼叫。爲什麼這樣?什麼是解決方法?我想用sched_setaffinity
。這需要CPU_SET
,只有_GNU_SOURCE
可用。
UPDATE
我如何趕上SIGINT
:
static volatile int running = 1;
static void int_handler(int i) {
running = 0;
}
然後在main
:
signal(SIGINT, int_handler);
你如何「抓住'SIGINT'信號」? –
@KerrekSB,我已經更新了這個問題 – Leonid
如果你使用['sigaction'](http://man7.org/linux/man-pages/man2/sigaction.2.html)('sa_flags'歸零)而不是「信號」,做事情的工作? –