From: Koji Arai Date: 2003-10-15T23:19:28+09:00 Subject: [ruby-list:38577] Re: exit status on exit! 新井です。 In message "[ruby-list:38542] Re: exit status on exit!" on 14 Oct 2003 11:14:13 +0900, Takahiro Kambe wrote: > In message <20031013.015526.71082228.JCA02266@nifty.ne.jp> > on Mon, 13 Oct 2003 01:55:47 +0900, > Koji Arai wrote: > > > シェルの $? と、 0から255ではなくて0から126という範囲の関連はどこから > > > 来るのでしょうか。 > > > > sh がプロセスのシグナルによる終了を $? > 128 の値で示してい > > るというとこから。 > この辺、標準的にはどうなってるんでしょうね。 興味ありますね。ash, pdksh, bash, zsh はこのようになってました。 私の環境は csh 系が入ってないのですが csh ではどうでしょうね? > いずれにしろシグナル受けて終了したかどうかは、exit(3)で返している値と > 別にわかるので、 C とか ruby とかならってことですよね? > 128以下に限る必要性はないと思います。 逆に 128 以上に拘る必要もないというか・・ 私が最初にこれを意識するようになったのは bash のソースについてる bash-2.05b/examples/functions/exitstat というシェルで中身は以下 function check_exit_status () { local status="$?" local signal="" if [ ${status} -ne 0 -a ${status} != 128 ]; then # If process exited by a signal, determine name of signal. if [ ${status} -gt 128 ]; then signal="$(builtin kill -l $((${status} - 128)) 2>/dev/null)" if [ "$signal" ]; then signal="($signal)"; fi fi echo "[Exit ${status} ${signal}]" 1>&2 fi return 0 } PROMPT_COMMAND=check_exit_status $? の値を使ってプロセスがシグナルで終了した場合はそれをお知らせしてくれます。 で、128 以上の終了ステータスに対して $ (exit 143) [Exit 143 (SIGTERM)] とかなるのが嫌だったんですよね。それ以前は気にしてなかったし。 exit status を 128 未満(とか126未満とか)にしなさいといった記 述も見たことないのは確かですね。 まあ、実際にそんなのにお目にかかる事は(255以外)なかったですが。 -- 新井康司 (Koji Arai)