这是代码:
require 'minitest/autorun'
class Foo < Minitest::Test
def test_foo
Process.fork do
exit(0)
end
p Process.waitall
end
end
这是输出:
$ ruby a.rb
Run options: --seed 40445
# Running:
[[41827, #<Process::Status: pid 41827 exit 1>]]
.
Finished in 0.016218s, 61.6599 runs/s, 0.0000 assertions/s.
1 runs, 0 assertions, 0 failures, 0 errors, 0 skips
为什么退出代码不为零?
没有Minitest的相同代码也可以正常工作:
Process.fork do
exit(0)
end
p Process.waitall
怎么了?
答案 0 :(得分:2)
https://github.com/seattlerb/minitest/issues/467
问题是
fork
复制了父进程的at_exit
处理程序。 Minitest使用at_exit
来运行测试,因此您正在努力做到这一点。在fork doco中:“子进程可以使用Kernel.exit!
退出以避免运行任何at_exit
函数。”