参考手册:Ruby 语言样式——结束时的相关处理

当到达脚本尾部或出现了未能捕捉到的异常时,php?name=Ruby" onclick="tagshow(event)" class="t_tag">Ruby会结束程序(当调用php?name=%BA%AF%CA%FD" onclick="tagshow(event)" class="t_tag">函数exit、abort或对主线程发出Thread.kill命令时,会引发SystemExit异常)。结束程序时会依次进行下列处理。

 1. 对所有线程执行Thread.kill。
 2. 若注册了Ruby的伪信号SIGEXIT的处理程序的话,就执行它(请参考trap)。
 3. 若注册了END块(END {...}或at_end函数指定的块)的话,就以与记录相反的顺序执行它.若在该块的执行过程中发生大规模退出(non-local exit)的话,就中断该块的运行.但脚本仍将继续运行.
 4.

  在ObjectSpace.define_finalizer中,若注册了finalizer的话就执行它(执行顺序不定).若在执行finalizer的过程中,发生了大规模退出的话,就中断finalizer的运行,但脚本仍将继续运行.
 5.

  使用exit(3)结束程序.

  此时传来的状态值取决于程序的结束方法.例如,
    * 到达脚本尾部时 值为0
    * 传递给exit的参数
    * 若非由SystemExit引起的异常的话,其值为1
    * 若明显是SystemExit的话,其值为0

使用exit!函数时,将只执行exit(2),而不会执行上述任何步骤.