質問

私の簡単なカスタムシェルのいくつかについて触れたいと思いコマンドの標準入力から、実に実行しexecvp().この前に、私が作成したフォークの現在のプロセスと呼びかけにexecvp()はその子プロセスは、とにかく、どうしたらいいでしょうか通口(0)です。

のようなこと:

pid = fork();

if(pid == -1) {
    perror("fork");
    exit(1);
}

if(pid == 0) {
    // CHILD PROCESS CODE GOES HERE...
    execvp(pArgs[0], pArgs);
    exit(0);
} else {
    // PARENT PROCESS CODE GOES HERE...
}

現在のコマンドラexecvp()で返しの誤りでしょ?たいへの対応として、今、私は常に呼び出し口(0)とは、子プロセスは、常に"OK"の状態です。

どのように戻ったとしても、適切な状況からexecvp()を呼び出しは一切できませんので、exit()電話のかけ方は?うかを取得しint値execvp()を返すだけでなく、exit()の引数ではなく0になります。は十分正しいのですか。

他のヒント

からのご質問は少し辛い出だと思います。いすカバーのカップルに関連する問題

  • execvp() どちらかを返さない(成功)、またはエラーを返します。意味を子どものコードのみ対応。子どものコードを捉えた結果、 execvp() 使用する値 exit() と考えられる。子どものコードを返しません0以降のみが成功の execvp たや その processsは0を返します(します。
  • の親を取得できる子ども情報から waitpid() つま口です。が定義されたマクロプ情報から返される status パラメータとします。特にお客様の特定の目的のためには WIFEXITED さんの場合子供の終了した"通常"、 WEXITSTATUS の子どもの状況として渡される exit().を参照 waitpid manページのその他のマクロです。

親プロセスにwait()またはwaitpid()を使用してください。ここでの例:OSは、あなたのプロセス >。

子供が死んだ場合、

また、SIGCHLD信号が親プロセスに送信されます。

scroll top