From: WATANABE Hirofumi Date: 2000-11-14T10:41:06+09:00 Subject: [ruby-list:25935] Re: 子プロセスから標準出力と終了ステータスを得たい わたなべです. yharuo@mail7.dddd.ne.jp writes: :On Mon, 13 Nov 2000 21:00:03 +0900 :Takahiro Kambe wrote: : :|wait(2)等で得られる子プロセスの状態にはそれぞれ、 :| :| 1. その終了状態が含まれます。 :| 2. プロセスの受け取ったシグナル番号やcore dumpしたかどうかの :| 情報が含まれます。 :| 3.の場合にはプロセスが停止した原因のシグナル番号が含まれます。 :| :|というわけで、wait(2)相当の子プロセスの状態を得ることができるためには、 :|$?には子プロセスの終了状態だけを含むのでは都合が悪いと言えます。 : :今、問題にしているのは1.です。 :exit(n)で終了したときの返り値は何にすべきか、です。 :現状のRubyでは、`` からは n+256、system()からは n が返っているようです。 ですから $? は wait(2) で得られるものをそのまま反映している と言ってるんですけど? :下記に、Linuxのbashコマンドのmanから、終了ステータスに関する部分を抜粋 :してみました。 bash のマニュアルを見てもあまり意味がありませんが, bash の内部では static int process_exit_status (status) WAIT status; { if (WIFSIGNALED (status)) return (128 + WTERMSIG (status)); else if (WIFSTOPPED (status) == 0) return (WEXITSTATUS (status)); else return (EXECUTION_SUCCESS); } という処理が入ってます. Ruby ではこの status が $? にだいたい相当し(Perl と同じ), bash では process_exit_status(status) が $? に相当します. だから 1 は 1 になります. -- わたなべひろふみ