In message <20001116164843.7086.YHARUO / mail7.dddd.ne.jp>
	on Thu, 16 Nov 2000 16:50:17 +0900,
	yharuo / mail7.dddd.ne.jp wrote:
> On Thu, 16 Nov 2000 16:10:04 +0900
> matz / zetabits.com (Yukihiro Matsumoto) wrote:
...
> |質問の意味が良く分かりませんが、「普通の実装」では
と、まつもとさんも書かれている様に質問の意図は何でしょうか。

> すみません。あてずっぽうで質問しているので^^;
「あてずっぽう」はないでしょう。>:-(

> プロセスがexit(n)で正常終了した場合は、必ず、
> 
> ・上位バイト:n(ただしnは0〜255の間)
> ・下位バイト:WEXITSTATUS(0) の値、つまり、ゼロ
> この値が $? にセットされる。
> 
> と解釈してよろしいのでしょうか?
そうだとして、$?を参照する親のプロセスは、子プロセスがexit(n)で終了し
たと断定することは一般にできません。

4BSD系の場合の*実装*だと、waitの戻り値statusには、

1. status & 0x7f が 0 の場合

	- (status >> 8) & 0xff にexit(x)のxが入る。

2. status & 0x7f が 0x7f の場合

	- 子プロセスは停止
	- (status >> 8) & 0xff に停止の原因となったシグナルの番号

3. status & 0x7f が1.や2.以外

	- 子プロセスはシグナルを受けて終了した。
	- (status >> 8) & 0xff に停止の原因となったシグナルの番号
	- status & 0x80 がゼロでなければcore dump

(intの下位16ビットだけ使ってるのね。)

あとは2.や3.をperlやrubyの側で、どの様に$?に反映させているかでしょう。
2.あたりはプロセスの終了ではないので無視しているかもしれません。

--
神戸 隆博(かんべ たかひろ)		at 仕事場