2

Linux では、fork() を呼び出した後、子プロセスがすぐに exec を呼び出します。親プロセスが待機()し、子が実行されるまで何もしない方法はありますか?

ありがとう。

4

3 に答える 3

3

子が exec() を実行していることを親が知る (API) 方法はありません。

しかし、良いパイプトリックがあります: 子に (パイプの) ファイル記述子を継承させ、( fork() の前に) パイプの close-on-exec フラグを設定します。親は、パイプが exec() によって閉じられると、パイプの EOF によって通知されます。

これは子供の協力を必要としないことに注意してください。

于 2013-06-12T20:10:07.040 に答える
2

親に返されるfork呼び出しから返されるプロセス ID を使用して、waitpidを使用する必要があります。

編集

または、子が exec を呼び出そうとしていることを知りたい場合は、親で一時停止を使用します。親に適切なシグナルを送信してkillを呼び出すように子を取得します(親のプロセス ID はgetppidから取得できます)。USR1 シグナルを使用すると便利な場合があります。exec の直前にこれを行います。

于 2013-06-12T19:43:33.043 に答える