管道状态在epoll期间不会改变,但自上次读取后已发生变化。进程B会再次唤醒吗?
答案 0 :(得分:1)
我对http://linux.die.net/man/4/epoll中常见问题解答(Q9)的理解是,您将在步骤6中获得另一个事件(假设您可以保证在步骤4之后确实发生了第5步,并且在步骤4之后管道为空)
话虽如此,您可能会得到更多的事件而不是保证(但您必须小心,只能依赖记录的行为) - 请参阅http://cmeerw.org/blog/753.html#753和http://cmeerw.org/blog/750.html#750
答案 1 :(得分:1)
虽然确实在第6步唤醒了内核,但手册页中没有记录。您提供的用例与应该使用EPOLLET
的方式不符。
根据文档,第6步应“从FD中读取”。唯一应该从FD轮询是在您尝试读取并获得EAGAIN
之后。