Ruby はスクリプトの終端に達した場合や捕捉していない例外が発生した場 合に終了します(関数 exit や abort 、メインスレッドに対する Thread.kill などは SystemExit 例外を発生させます)。終了時には以下 の処理が順に実行されます。
ObjectSpace.define_finalizer により、ファイナ ライザが登録されていればそれらを実行する(実行順序は不定)
ファイナライザ実行中に発生した大域脱出はそのファイナライザの処理 を中断するが、スクリプトはまだ終了しない。
ただし、関数 exit! による終了は、_exit(2) を実行するだけで、上記の処理はいずれも行われません。
*1status はどんな値になる?
*2あらい 2002-02-23: 終了する方法次第です。ここでは終了時の内部処理について触れてるのであしからず
*3ならば値に触れているページへのリンクがあると良いと思います
*4あらい 2002-02-23: ありますよ。exit とか abort とか書いてるで
しょー(^^)。例外については書いてないかもしれないですね。ちょっと
ソースを見てました。SystemExit による例外以外は終了ステータス 1
で終了します。SystemExit を明示的に raise したときは 0 です。こ
れ、意図されてるのかな?ソースからじゃなんとも判断つかないや
*5あらい 2002-02-23: 上記「終了処理」の対象ではありませんが、
オプション解析時には終了ステータス 2 で終
了(exit(3))することがあります(不正なオプション
指定)。スクリプトの parse error は、エラーの個数(だけど普通は 1。
1 以外を返すことはないかな?)で終了(exit(3))。
コマンドを実行できなかった子プロセスは 127 で終了
(_exit(2)) します(シェルと同じだ)。etc...