ruby at_exit退出状态

tig*_*tig 12 ruby status exit atexit

我可以在at_exit块中确定自我进程退出状态吗?

at_exit do
  if this_process_status.success?
    print 'Success'
  else
    print 'Failure'
  end
end
Run Code Online (Sandbox Code Playgroud)

tad*_*man 17

虽然关于这个的文档真的很薄,但是!设置为发生的最后一个异常,并在exit()调用之后,这是一个SystemExit异常.将这两者组合在一起就可以得到:

at_exit do
  if ($!.success?)
    print 'Success'
  else
    print 'Failure'
  end
end
Run Code Online (Sandbox Code Playgroud)


tig*_*tig 15

使用来自tadman的想法

at_exit do
  if $!.nil? || $!.is_a?(SystemExit) && $!.success?
    print 'success'
  else
    code = $!.is_a?(SystemExit) ? $!.status : 1
    print "failure with code #{code}"
  end
end
Run Code Online (Sandbox Code Playgroud)

  • 只是我的意见是给予tadman"检查"而不是你自己/耸肩. (2认同)