2

私はリチャード・スティーブンスの「UNIX 環境での高度なプログラミング」を読んでいて、このトピックを見つけました。

*8.13. システム機能

*****システムは fork、exec、waitpid を呼び出すことで実装されるため、戻り値は 3 種類あります。**

1. fork が失敗するか、waitpid が EINTR 以外のエラーを返した場合、システムはエラーを示すために errno を設定して -1 を返します。

2. シェルが実行できないことを意味する exec が失敗した場合、戻り値はシェルが exit(127) を実行したかのようになります。

**3. それ以外の場合、fork、exec、waitpid の 3 つの関数はすべて成功し、system からの戻り値は、waitpid に指定された形式のシェルの終了ステータスになります。

私の理解では、 cmdstring 名でプロセスをfork()し、exec()で親プロセスから分離します。

しかし、waitpid() 関数がsystem() 関数呼び出しの一部であることがわかりませんか?

以下のリンクのあいまいなコンストラクター呼び出しは、オブジェクトの作成中に正しい答えを提供しませんでした。

4

3 に答える 3

1

マニュアルページから:

system() は /bin/sh -c command を呼び出して command で指定されたコマンドを実行し、コマンドが完了すると戻ります。コマンドの実行中、SIGCHLD はブロックされ、SIGINT と SIGQUIT は無視されます。

system() はおそらくwaitpid()、シェル コマンドが終了するまで待機するために使用されます。

于 2013-08-21T19:06:39.667 に答える