【发布时间】:2013-06-08 13:34:17
【问题描述】:
如果epoll_wait 因任何原因(例如被 SIGINT)中断,我想处理
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)的默认操作是终止进程。所以在第一种情况下,你只是在观察预期的行为。