問題タブ [wexitstatus]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
2661 参照

c++ - 正しい戻りコードではなく、waitpid/wexitstatus が 0 を返す

以下のヘルパー関数を使用して、コマンドを実行し、posix システムで戻り値を取得します。以前は を使用していましたが、アプリケーションを実行して終了する前にpopenアプリケーションのリターン コードを取得することは不可能でした。popenpopenpclose

次のヘルパー関数は、プロセス フォークを作成しexecvp、目的の外部プロセスを実行するために使用し、次に、親waitpidがリターン コードを取得するために使用します。実行を拒否する奇妙なケースが見られます。

wait=trueで呼び出された場合waitpid、何があってもアプリケーションの終了コードを返す必要があります。ただし、stdout戻りコードがゼロ以外である必要があることを指定する出力が表示されますが、戻りコードはゼロです。通常のシェルで外部プロセスをテストすると、echoing$?はゼロ以外を返すため、外部プロセスが正しいコードを返さないという問題はありません。それが助けになる場合、実行されている外部プロセスは次のとおりですmount(8)(はい、使用できることはわかっていますmount(2)が、それは重要ではありません)。

コードダンプについては事前にお詫び申し上げます。そのほとんどはデバッグ/ロギングです:

コマンドは正しいパラメーターで正常に実行され、関数は問題なく続行され、WIFEXITEDが返されることに注意してくださいTRUE。ただし、WEXITSTATUS何か他のものを返す必要がある場合は、0 を返します。

0 投票する
1 に答える
1192 参照

c - エラー状態の正しい WEXITSTATUS を返すための waitpid() を取得できません

コマンドラインで実行するとエラーが返されるコマンドといくつかの入力があり、関連するエラーコードは 1 です。

私はこのエラーコードをキャッチしようとしていますwaitpid():

私のスレッドは、処理するperform_foo_function()ものがなくなるbar_dataまで、またはデータのエラーが原因でプロセスが失敗するまで実行されます。

私の質問は、このプロセスのエラーステータスをキャッチする方法ですか? デバッグの過程で、WEXITSTATUS意図的にエラー状況を作成するか、正当な入力を提供するかにかかわらず、 は常にゼロです。

関連するステータス コード チェックについて何を誤解してwaitpid()いますか? また、これを機能させるにはどのような変更を加える必要がありますか?

ファローアップ

次のコードは、ブロックせずに機能するようです。

このステップでプロセスがすでに終了しているため、 「チェック後」のwaitpid()呼び出しはハングしないと思います。

0 投票する
1 に答える
9032 参照

c - c whileループのfork()とwait()?

私はCでこの小さなプログラムを持っていて、それがどのように機能するかを理解しようとしています。これは、コマンドラインで数行を使用fork()wait()て出力する単純なwhileループです。私が思うことをできる限りコメントしましたハプニング

このプログラムは、次のように出力することになっています。

子プロセスの1つが戻るiと、親プロセスはそれを待ち&jますか? これは本当に私を混乱させます。どんな助けでも大歓迎です。