ゼロ以外の終了コードはうまくいきますか?

ゼロ以外の終了コードはうまくいきますか?

私が理解しているように、Unixシェルシェルスクリプトは発行でき、発行する必要があります。終了コード。終了コード0はプログラムが正常に完了したことを示し、正の整数終了コード(1-255)は、プログラムが終了したときにエラーが発生したことを示します。

何があります - Unixシステム?シェル? (どの用語を使用すべきかわかりません。) - 特定の意味でこれらの255エラー終了コードを維持しますか?つまり、私はコマンドラインプログラムを作っていますが、うまく行動するUNIX市民になりたいのです。プログラムがゼロ以外の終了コードを返すように安全に設定し、そのコードを自分のプログラムに適用できますか?それとも、システム自体が特定の終了コードを特定の方法で解釈するので、私のプログラムで特定の終了コードを使用しないでください。

ベストアンサー1

(回答から盗まれた編集、質問意見から引用、最終的に指摘ここ)。

シェルスクリプトでは、特定の条件に対して128以上の偽のシャットダウン状態が提供されるため、このような状況を回避するのが最善です。 (sshは255を使用しますが、この方法では使用されません。)

128 以下の 2 つの終了状態は、特定のシェルエラーを示すためにも使用されるため、通常、これらのコードも使用しないことをお勧めします。

BSDは64から始まり、いくつかの終了コードを標準化しようとしています。恋に落ちたら、使用するのに問題はないと思います(sysexit.hを検索してください。公式の標準ではないので、コピーする必要があります)。これを使用しない場合、「64未満」は126:-Pよりも良い整数です。つまり、シェルとカーネルの両方がそれを気にしません。これは、共同作業プログラム、特にメーラーコンポーネント間で使用されます。 63以上の「エラー」状態が必要な場合は、Unixでその状態が「保存」されていることを心配する必要はありません。

システムコールインターフェイス自体はカーネルとも呼ばれ、実際には関係ありません。システムコールでは、特別な終了状態がエンコードされます。帯域外0〜255の範囲内。これは、シェルがSIGKILLによって終了したコマンドの「Kill​​ed」状態を検出して印刷する方法です。この帯域外情報は、単純な呼び出しではexit偽造できません。

もし状態NULLではありません。待つ()と待機プロセス() 店舗状況情報整数それが何を指しているのか。この整数は、次のマクロを使用して確認できます(このマクロは、次のように整数自体をポインタとして使用せず、引数として使用します)。 待つ()と待機プロセス()! ):

私の妻が私をだました(状態)子プロセスが正常に終了した場合はtrueを返します。つまり、通話を通じて出口(3)または_出口(2) または main() から戻ります。

私たちの終了ステータス(状態)子プロセスの終了ステータスを返します。これは最下位8ビットで構成されています。状態呼び出しで子が指定したパラメータ出口(3)または_出口(2)またはmain()のreturn文のパラメータとして使用されます。このマクロは、次の状況でのみ使用してください。 妻の不正行為真を返します。

WIF信号(状態)子プロセスがシグナルによって終了した場合はtrueを返します。

WTERMSIG(状態)子プロセスを終了したシグナル番号を返します。このマクロは、次の状況でのみ使用してください。WIF信号真を返します。

WCOREDUMP(状態)子プロセスがコアダンプを生成した場合はtrueを返します。このマクロは、次の状況でのみ使用してください。 WIF信号真を返します。このマクロはPOSIX.1-2001で指定されておらず、一部のUNIX実装(AIX、SunOSなど)では使用できません。 #ifdef WCOREDUMP ... #endifに含まれている場合にのみこれを使用してください。

WIFが停止しました(状態)シグナリングによってサブプロセスが停止した場合はtrueを返します。呼び出しが完了した場合にのみ使用できます。ウィンターリードまたは子供が追跡されているとき(参照(2)).

WSTOPSIG(状態)子プロセスを停止したシグナル番号を返します。このマクロは、次の状況でのみ使用してください。ワイヤレスネットワークが停止しました真を返します。

WIFの継続(状態)(Linux 2.6.10以降)以下を渡し、子プロセスが再開されるとtrueを返します。 信号制御

そして

ssh はリモートコマンドの終了状態で終了するか、エラーが発生すると 255 で終了します。

そして

$ a
bash: a: command not found...
$ echo $?
127
$ /dev/null
bash: /dev/null: Permission denied
$ echo $?
126

おすすめ記事