In message <20020112133241.6F2E71FFB / mail.nmn.jp>
kofu / nmn.jp writes:

>  このようにシェルで実行して得た終了ステータスと
> Ruby の fork と exec による子プロセスで実行して得た
> 終了ステータスは次のようになっています。
> 
>   sh      0      1      2
>   Ruby    0    256    512
> 
>  256倍というのが引っかかるのですが、どうしてこう
> なるのでしょうか。仕様なのか、バグなのか、仕様だと
> したらどういう風に使うものなのか、この点を教えて
> 頂ければ幸いです。

まるっきり仕様なので全く問題ありません.man waitpid して
/usr/include/sys/wait.h かなにかそのあたりを見て,さらに ruby のソース
を見たら疑問はなくなるでしょう.大半のシステムでは単に 256 で割れば終
了ステータスを得られます.

# 本来そうでないシステムでも合わせてたりする.


それで,スクリプトの可搬性を高めるため 1.7.x から(でしたっけ?)$? は 
Process::Status のインスタンスになり,sys/wait.h で定義されてるマクロ
に相当するメソッドを使えるようになってます.

# $?.exitstatus は終了ステータスをかえすし $?.signaled? は子プロセスが
# シグナルをうけた場合真になる.


-- 
柳川和久 @ 東大阪市 . 大阪府                               January 12, 2002
「....少なくとも
    夜の空の方が本物だということはわかったな.昼間の空は書き割だ」
「なによそれ」「へんだぜ」