由于EINTR,我的epoll_wait失败。 我的gdb跟踪显示这个:
enter code here 221 in ../nptl/sysdeps/pthread/createthread.c (gdb) 224 in ../nptl/sysdeps/pthread/createthread.c (gdb) [New Thread 0x40988490 (LWP 3589)] 227 in ../nptl/sysdeps/pthread/createthread.c (gdb) epoll_wait error in start timer: Measurement will befor entire duration of execution epoll_wait: Interrupted system call [Thread 0x40988490 (LWP 3589) exited]
这个string“开始计时器中的epoll_wait错误:测量将在执行的整个过程中”由stderr打印。
我无法做出,如何补救这个EINTR,以便epoll_wait可以工作。 任何想法如何通过GDB跟踪生成EINTR?
请帮我(这是紧急)。 提前致谢。
某些信号处理程序将在任何Unix或Linux上中断epoll_wait()
, select()
和类似的系统调用。 这是设计的,所以你可以打断这些系统调用。
你不能直接补救。 典型的解决方案是显式检查EINTR的errno并再次执行epoll_wait()
:
int nr; do { nr = epoll_wait(epfd, events, maxevents, timeout); } while (nr < 0 && errno == EINTR);
另请参阅: gdb错误:无法执行epoll_wait:(4)中断的系统调用