子で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;
}