15

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

at_exit do
  if this_process_status.success?
    print 'Success'
  else
    print 'Failure'
  end
end
4

2 回答 2

21

使用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
于 2009-07-20T16:50:52.980 回答
19

虽然这方面的文档真的很薄,但 $! 设置为发生的最后一个异常,并且在 exit() 调用之后,这是一个 SystemExit 异常。把这两者放在一起,你会得到:

at_exit do
  if ($!.success?)
    print 'Success'
  else
    print 'Failure'
  end
end
于 2009-07-17T20:30:40.520 回答