日期:2014-05-16  浏览次数:21111 次

linux中求如何通知epoll_wait退出
int a = epoll_wait(b,ev,65535,-1);
使用close(b);epoll_wait也一直卡着。
怎么通知epoll_wait我要退出epoll呢?
epoll_wait Linux epoll 退出

------解决方案--------------------
让其一开始就监听一个pipe的读端,
如果要让其停止,则向pipe的写端写入一字节,或者关闭写端等等。 这样epoll_wait返回后,检测状态改变的是否为此pipe,,是,则进入退出处理过程。


或者首先设置一个标志位flag ,,, 向进程发送一个信号看看,先用signal(SIGUSR1, handler), 
然后epoll_wait时,,向此进程发送信号kill(pid, SIGUSR1);
handler可以是空函数,什么都不作。。 从理论上epoll_wait应该会返回-1, errno == EINTR.  然后你就检测下某个flag是否置位,如果置位,代表要退出了。  这种方案没试验过。。 用上一种方案好些,