0

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

1 に答える 1