Linuxの終了ステータスとすべてのステータスのリストは何ですか?

Linuxの終了ステータスとすべてのステータスのリストは何ですか?

私はLinuxのbashスクリプトを学びようとしています、そして私は次を読んでいます。http://tldp.orgウェブサイトで一種のログクリアスクリプトを見て、何かがシャットダウン状態で使用されていることを発見しました。以下の記事のいくつかのスクリプトの一部が含まれています。

#!/bin/bash
# Cleanup, version 3

#  Warning:
#  -------
#  This script uses quite a number of features that will be explained
#+ later on.
#  By the time you've finished the first half of the book,
#+ there should be nothing mysterious about it.

LOG_DIR=/var/log
ROOT_UID=0     # Only users with $UID 0 have root privileges.
LINES=50       # Default number of lines saved.
E_XCD=86       # Can't change directory?
E_NOTROOT=87   # Non-root exit error.

E_NOTROOT(86)とE_XCD(87)の両方がプログラムの予約済み終了ステータスコードを使用している場合はどうなりますか?

または

両方の変数がこの目的で乱数を使用する場合です。

引用:http://tldp.org/LDP/abs/html/abs-guide.html

ベストアンサー1

通常、すべてのプロセスの終了ステータスはPOSIXによって8ビット(符号なし)整数値として定義されるため、可能な値は0から255(含む)です。

WEXITSTATUS(stat_val)_exit()[この]マクロは、子プロセスと送受信状態パラメータの下位8ビットまたは子exit()プロセスから返された値を評価しますmain()ちょっと待って(3p)

C標準は、終了成功または失敗をそれぞれ示すためにexit()に渡すことができる2つの定数をEXIT_SUCCESS指定します。EXIT_FAILURE出口(3)

通常、ゼロにEXIT_SUCCESS等しく、ゼロ以外のすべての値は、誤った符号として扱われます。

ただし、Bashを含むPOSIXに似たシェルは、内部使用のために一連の高い終了状態を維持し、コマンドが明示的な終了状態を返す機会なしに呼び出されたコマンドで問題が発生したことを示します(バッシュマニュアル):

シェルの場合、終了ステータス0で終了したコマンドは成功しました。終了ステータス 0 は成功を示します。ゼロ以外の終了状態は失敗を示します。コマンドが致命的な信号Nで終了すると、bashは終了状態として128 + Nの値を使用します。コマンドが見つからない場合、コマンドを実行するために生成されたサブプロセスは状態127を返します。コマンドが検出されたが実行可能でない場合、戻り状態は 126 です。

実際には、1から125の間の値は、プログラムごとにエラーを示すために使用され得る。 @mosvyがコメントで暗示したように、BSDの努力いくつかの意味のある終了コードを標準化しましたが、一般的には使用されませんでした。これらの均一な終了コードは64から始まり、それ以下のコードはプログラム固有の使用のために予約されています。 「正規化された」最も高い値は78なので、例に記載されている値は純粋にランダムなプログラム固有のコードであることは明らかです。

おすすめ記事