私は学んでいlibev
ます。ev_default_fork
しかし、私はの旗について理解していませんev_loop
。これは、実行に近い問題ですか?旗のようにFD_CLOEXEC fcntl()
?フラグを設定する必要があるときは?このフラグが必要なのはどちらの場合ですか?これはドキュメントの説明です:
この関数は、後続のev_loop反復で、カーネル状態が1つあるバックエンドのカーネル状態を再初期化するフラグを設定します。名前にもかかわらず、いつでも呼び出すことができますが、子プロセス(または子と親の両方)でforkした後、最も意味がありますが、これもほとんど意味がありません。libevfunctionを使用する前に、子で呼び出す必要があります。これは、次のev_loopの反復でのみ有効になります。
一方、子でイベントライブラリを使用する場合にのみ、子プロセスでこの関数を呼び出す必要があります。fork + execだけの場合は、呼び出す必要はまったくありません。
関数自体は非常に高速であり、フォークの後で念のために呼び出すことは通常問題ではありません。これを簡単にするために、関数はpthread_atforkの呼び出しに完全に適合します。pthread_atfork(0、0、ev_default_fork);