状況: 私はCで書かれたマルチスレッドプログラムを持っています。スレッドの1つがforkすると、exec()を使用して子プロセスが別のプロセスに置き換えられ、親プロセスが子プロセスを終了するのを待ちます。C - execはマルチスレッドプロセスでforkをすぐに実行する必要がありますか?
問題: 子プロセスがフォークによって作成された後()は、次のexec()コマンドで使用される引数をコンパイル数行のコードがあります。
仮説 私は子プロセスの間の時間にフォーク(によって作成されたと仮定して訂正)とexec()、子プロセスに置き換えられアム - 親のコピーであること - がありますすべてのこれらのスレッドは非常に短期間ではありますが実行されますか?
もしそうなら、fork()の直後にexec()を呼び出す正しい解決策はありますか?
標準ライブラリ(例えば、stdio、 'atexit'、' malloc'、スレッドの作成と破壊など)は、内部的に同期リソースを使用している可能性があります。フォーク '?もしそうなら、 'pthread_atfork'の使用はどのように問題を解決するでしょうか? –
@R、はい、おそらく。それはライブラリによって異なります。場合によっては、すべてのミューテックスをプリフォークでロックし、フォーク直後に解放することができます。他のものでは、あたかもプロセスが最初から始まったかのように再初期化するだけでいいです。私は 'pthread_atfork'から関連する箇所を追加しました。 –