[解決済み] Linuxの標準的な終了ステータスコードはありますか?
2022-03-16 12:30:28
質問
Linuxでは、プロセスの終了ステータスが0であれば、正しく終了したとみなされる。
セグメンテーションフォールトの場合、終了ステータスが11になることがよくありますが、これは単に私が働いているところの慣習なのか(このように失敗したアプリはすべて内部的なものでした)、標準なのかはわかりません。
Linuxのプロセスには、標準的な終了コードがありますか?
解決方法は?
からの戻り値で、リターンコードの8ビットとキリングシグナルの番号の8ビットが1つの値に混在しています。
wait(2)
& co.
.
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <signal.h>
int main() {
int status;
pid_t child = fork();
if (child <= 0)
exit(42);
waitpid(child, &status, 0);
if (WIFEXITED(status))
printf("first child exited with %u\n", WEXITSTATUS(status));
/* prints: "first child exited with 42" */
child = fork();
if (child <= 0)
kill(getpid(), SIGSEGV);
waitpid(child, &status, 0);
if (WIFSIGNALED(status))
printf("second child died with %u\n", WTERMSIG(status));
/* prints: "second child died with 11" */
}
終了ステータスはどのように判断しているのですか? 従来、シェルは8ビットのリターンコードしか保存しませんが、プロセスが異常終了した場合はハイビットをセットします。
$ sh -c 'exit 42'; echo $? 42 $ sh -c 'kill -SEGV $$'; echo $? セグメンテーションの不具合 139 $ expr 139 - 128 11
もしこれ以外のものが表示されるなら、おそらくそのプログラムは
SIGSEGV
シグナルハンドラを呼び出すと
exit
のように、シグナルによって実際に殺されることはありません。 (プログラムは
SIGKILL
と
SIGSTOP
.)
関連
-
ゼロからLinuxのisoイメージを作る方法(グラフィックチュートリアル)
-
rsyncとinotfiyの組み合わせでリアルタイムバックアップ問題を実現
-
Linux Mintで入力メソッドを削除する方法は?Linux Mintで冗長な入力メソッドを削除するためのヒント
-
エラーの解決方法 お客様のバージョンは /bin/bash: java: コマンドが見つかりませんでした。
-
sudo が sudo として表示される: setuid root である必要がある
-
[解決済み] Unix/Linuxで、ファイルのあるフォルダを別のフォルダにコピーするにはどうしたらいいですか?[クローズド]
-
[解決済み] ディレクトリへのシンボリックリンクを削除する
-
[解決済み] Linuxで特定のポートで動作しているプロセスを停止させる方法は?
-
[解決済み] Bashでパイプ出力と終了ステータスをキャプチャする
-
[解決済み】Pythonの終了コード
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Centos7のインストールと展開無料のconfluence wikiの(知識ベース)詳細な操作手順
-
Kali Linuxのマウスを左利き用に設定する方法は?Linuxマウス左利き操作選択方法
-
ディープインシステムの画面解像度を設定する方法は?ディープインシステムの解像度を設定する方法
-
TclError: 表示名がなく、$DISPLAY環境変数もない。
-
floor'への未定義の参照/`&'への未定義の参照
-
Process.waitFor()の戻り値の意味するところ
-
[解決済み] Linux/Unixで$PATHを永久に設定する方法 [終了しました].
-
[解決済み】Bashスクリプトに渡された引数の数を確認する
-
[解決済み】「エルノ」の意味を知るには?
-
[解決済み] Bashスクリプトでエラーを発生させる