0

我在学习libev。但我不ev_default_fork明白ev_loop. 这是关闭执行的问题吗?喜欢FD_CLOEXEC fcntl()国旗吗?什么时候需要设置标志?什么情况下需要这个标志?这是对文档的描述:

此函数设置一个标志,导致后续 ev_loop 迭代重新初始化具有内核状态的后端的内核状态。尽管有这个名字,你可以随时调用它,但是在分叉之后,在子进程(或子进程和父进程,但这又没有意义)中最有意义。在使用任何 libev 函数之前,您必须在子进程中调用它,并且它只会在下一次 ev_loop 迭代时生效。

另一方面,当且仅当您想在子进程中使用事件库时,您才需要在子进程中调用此函数。如果你只是 fork+exec,你根本不需要调用它。

该函数本身非常快,并且在分叉后调用它通常不是问题。为了简单起见,该函数将非常适合调用 pthread_atfork: pthread_atfork (0, 0, ev_default_fork);

4

1 回答 1

2

好吧,只需阅读文档,您在之后调用子函数中的函数fork(),最好是您做的第一件事。所以你的代码应该是这样的:

switch (fork()) {
case -1:
    /* everything's gone pear-shaped */

default:
    /* i am the parent */
    ...
    break;

case 0:
    /* i am the child */
    ev_loop_fork(EV_DEFAULT);
    ...
    break;
}
于 2012-08-01T12:08:25.403 回答