0
我想打电话ev_loop_fork,如果我不叫ev_loop_fork的孩子,那么儿童观察者就不会被触发。发生了什么,如果我没有在孩子
这是我的代码,我建立与EVBACKEND_EPOLL和EVFLAG_NOENV标志的ev_loop。
因此没有EVFLAG_FORKCHECK标志。
然后我发表评论ev_loop_fork打电话给孩子。
如果一切顺利,我认为孩子不会触发超时回调函数。
但实际上,输出是这样的:
$ 4980叉4981
$超时在4980
$超时在4981
似乎观察者仍然在孩子中被触发,它的行为与呼叫ev_loop_fork。
那么有什么问题,谢谢。
#include<ev.h>
#include<stdio.h>
#include<unistd.h>
void timeout_cb(EV_P_ ev_timer *w,int revents)
{
printf("time out at %d\n", getpid());
ev_break(EV_A_ EVBREAK_ONE);
}
int main()
{
int ret;
ev_timer timeout_watcher;
struct ev_loop *loop = ev_default_loop(EVBACKEND_EPOLL | EVFLAG_NOENV);
ev_timer_init(&timeout_watcher,timeout_cb,5.5,0.);
ev_timer_start(loop,&timeout_watcher);
ret = fork();
if(ret>0) printf("%d fork %d\n",getpid(),ret);
else if(ret==0)
{
//ev_loop_fork(EV_DEFAULT);
}
else return -1;
ev_run(loop,0);
return 0;
}