Ruby `exit!` 函数似乎调用了与文档相反的退出处理程序

The Ruby `exit!` function appears to call exit handlers contrary to documentation

JRuby 9.1.17.0 和 9.2.13.0 上的以下代码 运行 Windows:

at_exit { puts "at_exit function" }
ObjectSpace.define_finalizer("string",  proc { puts "in finalizer" })
exit!

产生这个:

at_exit function
in finalizer

我的预期是,根据 exit! 的文档,不应调用退出处理程序: https://ruby-doc.org/core-2.7.1/Kernel.html#method-i-exit-21

这是 exit! 中的错误吗?

是否有其他方法可以实现不触发退出处理程序的预期结果,从而保证从内部杀死我的系统?

这看起来像是 JRuby 中已知的不兼容性。

Kernel#exit! and Process::exit! were only added to ruby/spec on July, 27th 2020 (35 days ago) by Benoit Daloze (maintainer of ruby/spec, lead developer of TruffleRuby, JRuby Team Member): https://github.com/ruby/spec/commit/3bf0edcecb424df1e3a70fe48971b24af4be1977#diff-5b2f13aa6d64a30812e9221d9994b907R95-R99

的规格

2020 年 7 月 28 日,Benoit 在 JRuby spec 目录中添加了标签,将这些新规范禁用为已知故障:https://github.com/jruby/jruby/commit/f138bd9e62b757e6fd209101b2eb46b266b9b7b0#diff-332fe3279d2469ab891d8739c3d425e3R1-R2

JRuby 团队 运行 ruby/spec 以确保与所有其他 Ruby 实现兼容,但是当然,如果缺少规格,不兼容性可能会被忽视。