【问题标题】:epoll_wait fails due to EINTR, how to remedy this?epoll_wait 由于 EINTR 而失败,如何解决这个问题?
【发布时间】:2011-10-15 18:10:14
【问题描述】:

我的 epoll_wait 由于 EINTR 而失败。我的 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]

这个字符串“epoll_wait error in start timer: Measurement will be for entire duration of execution”由我在标准错误中打印出来。

我不知道如何解决这个 EINTR 以便 epoll_wait 可以工作。知道这个 EINTR 是如何由 GDB 跟踪生成的吗?

【问题讨论】:

    标签: c linux system-calls epoll interrupted-exception


    【解决方案1】:

    某些信号处理程序将中断任何 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 error: Unable to execute epoll_wait: (4) Interrupted system call

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-21
      • 1970-01-01
      • 2020-06-13
      • 2023-03-12
      • 1970-01-01
      • 2020-09-26
      相关资源
      最近更新 更多