Ruby はスクリプトの終端に達した場合や捕捉していない例外が発生した場 合に終了します(関数 exit や abort 、メインスレッドに対する Thread.kill などは SystemExit 例外を発生させます)。終了時には以下 の処理が順に実行されます。
ObjectSpace.define_finalizer により、ファイナ ライザが登録されていればそれらを実行する(実行順序は不定)
ファイナライザ実行中に発生した大域脱出はそのファイナライザの処理 を中断するが、スクリプトはまだ終了しない。
exit(3) により終了する
このとき渡される終了ステータス値は終了方法によります。 例えば、
関数 exit! による終了は、_exit(2) を実行するだけで、上記の処理はいずれも行われません。
*1ruby 1.7 feature: SystemExit を明示的に raise
したときでも 1 で終了するようになった