私はできる必要があります:
- プロセスをフォークしてexecvpにします(私はそれをしました)
- 子プロセスexecvpが成功したかどうかを確認します(方法がわかりません)
- 子プロセスが終了したかどうかを確認します(問題があります)
プロセスをフォークしていますが、子のexecvpが機能したか失敗したかを確認する方法がありません。それが失敗した場合、私はそれが失敗したことを知ることができる必要があります。現在使用しています
-1 != waitpid( pid, &status, WNOHANG )
しかし、pidプロセスのexecvが失敗した場合、waitpidは-1を返さないようです。
どうすれば確認できますか?waitpidのmanページを読みましたが、はっきりしていません。多分私の英語は十分ではありません。
編集:もっと説明するために:
私はホームワークのために自分のターミナルを構築しています。入力としてコマンド文字列を取得する必要があります。たとえば、「ls」と言ってから、コマンドを実行する必要があります。
子がフォークした後、子はコマンドを実行するためにexecvpを呼び出し(文字列を解析した後)、親はコマンドの最後に「&」があるかどうかを確認する必要があります。
コマンドの最後に記号「&」が存在しない場合、親は子が実行されるのを待つ必要があります。
したがって、execvpが失敗したかどうかを知る必要があります。失敗しなかった場合、親はwaitpidを使用して、子が実行を終了するのを待ちます。失敗した場合、親は子を待ちません。