나는 libev
을 배우고있다. 그러나 ev_default_fork
플래그가 ev_loop
인 것에 대해 이해할 수 없습니다. 이것은 close-on-exec의 질문입니까? FD_CLOEXEC fcntl()
깃발처럼? 플래그를 설정해야합니까? 이 플래그는 어떤 경우에 필요합니까? 이 문서의 설명 :약 ev_default_fork에 관한 libev의 플래그
이 함수 하나가 백엔드 커널 상태를 재 초기화 이후 iterationsto ev_loop하게하는 플래그를 설정한다. 그럼에도 불구하고 언제든지 호출 할 수 있지만 하위 프로세스 (또는 자식 및 부모 모두)에서 분기하는 것이 가장 적합합니다. 단, 다시 은 점을 찍습니다. libev 함수가 중 하나를 사용하기 전에 자식에서 호출해야하며 다음 ev_loop 반복에서만 적용됩니다.
한편, 자식에서 이벤트 라이브러리를 사용하려는 경우에만 자식 프로세스에서이 함수를 호출하면됩니다. 그냥 exec + fork하면, 전혀 호출 할 필요가 없습니다.
함수 자체가 매우 빠르며 보통 후크의 경우에는 호출에 문제가 없습니다. 이것을 쉽게하기 위해, 함수는 pthread_atfork 호출에 inquite에 잘 맞을 것입니다 : pthread_atfork (0, 0, ev_default_fork);
왜 내가 ev_default_fork()를 작성하지 않았습니까? – simon
이 ev_default_fork()는 FD_CLOEXEC fcntl() 플래그처럼 작동합니까? – simon
아니요, FD_CLOEXEC과 아무 관련이 없습니다. 'ev_default_fork()'는 내부 트릭을 수행하기 때문에 기본 ** loop **를 자식에서 사용할 수 있습니다. 그 말은 부모와 함께 등록 된 모든 사건이 그 아이와 계속해서 일한다는 것을 의미합니다. 그렇게하지 않으면 기본 루프가 해당 큐에서 사용할 수없는 이벤트를 갖습니다. – hroptatyr