2011-07-31 3 views
2

を「実行を生き残る任意のプロセスの設定を変更することができるフォークの後に」理解する:はウィキペディアからの引用

のMicrosoft Windowsスポーン機能が フォークとexecを機能のUnixに触発されています。しかし、Windowsはfork(少なくとも のWin32 API、CygwinやSFUなどのPOSIXエミュレーション環境では) をサポートしていないので、fork-exec の組み合わせの代わりにspawn関数が提供されています。それは 最も一般的なユースケースで適切に扱うものの

しかし、スポーン関数は、以来 フォーク後のexecを生き残る任意のプロセスの設定がを変更することがあり、フォークのexecのフルパワーを欠いています。 しかし、ほとんどの場合、この欠点は、 低レベルのCreateProcess APIを使用することで補うことができます。

私は、Windows spaw()がUnix fork-execよりも弱い理由を理解する方法を知りたいと思いました。「forkした後、execで生き残るすべてのプロセス設定が変更される可能性がありますか?

何らかのプロセス設定の「変更」は、forkとexecの間、またはexecの後にいつ発生しますか?

子プロセスでは、親プロセスから引き継いだ環境変数survice exec?

いくつかの例がありますか?

ありがとうございました!

答えて

1

"変更"はfork()とexec()の間で発生します。かなり多くのプロセス状態がexecを介して継承されます。http://pubs.opengroup.org/onlinepubs/9699919799/functions/exec.htmlを参照してください。特に、ファイルディスクリプタは継承されます(close-on-execビットが設定されていない場合)。

通常、pipe()とdup()の一連の呼び出しを使用してパイプを設定し、ファイル記述子をリダイレクトします。例えば。親プロセスが子プロセスと通信できるように、子プロセスの標準入力と出力をパイプに接続します。

関連する問題