bash マニュアルでは、$?
変える:
$?
最後に実行された前景パイプの終了状態に展開されます。
$?
または、キーを押したときにbashがCtrl-C
変数を更新する理由を知りたいですCtrl-Z
。
$ echo $?
0
$ ^C
$ echo $?
130
$ sleep 10
^Z
[1]+ Stopped sleep 10
$ echo $?
148
ベストアンサー1
コマンドラインを押すと、Ctrl+C何も終了しませんがSIGINT
(のハンドラが表示されます)。sigint_sighandler()
) とにかく終了状態を130に設定します(DopeGhotiの回答で説明されているように128 + 2).
if (interrupt_immediately)
{
interrupt_immediately = 0;
last_command_exit_value = 128 + sig;
throw_to_top_level ();
}
if (interrupt_state)
{
if (last_command_exit_value < 128)
last_command_exit_value = 128 + SIGINT;
print_newline = 1;
DELINTERRUPT;
}
バックグラウンドプロセスの終了を押すと、Ctrl+Cシェルはプロセスの終了を観察し、終了ステータスを$?
128にシグナル番号を加えた値に設定します。
バックグラウンドプロセスを一時停止すると、Ctrl+Zシェルはプロセスに何が起こるかを観察します。まだ死んでいませんが、wait
同じシステムコール(および友人)を介してその情報を報告します。同様に、シェルは終了ステータスを$?
128に信号番号148(SIGTSTP = 20)を加えて設定します。