我能否在 at_exit 块中确定自身进程的退出状态?
at_exit do
if this_process_status.success?
print 'Success'
else
print 'Failure'
end
end
借鉴自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
或者不使用 Perl 语法的方式:
require 'English'
at_exit do
if $ERROR_INFO.nil? || ($ERROR_INFO.is_a?(SystemExit) && $ERROR_INFO.success?)
print 'success'
else
code = $ERROR_INFO.is_a?(SystemExit) ? $ERROR_INFO.status : 1
print "failure with code #{code}"
end
end
at_exit do
if ($!.success?)
print 'Success'
else
print 'Failure'
end
end
at_exit
是可以的。但对于大型应用程序,你应该在预期的退出点使用exit
(或调用自己的方法来处理退出),并明确地处理错误、异常和信号。 - Kelvin($!.is_a?(SystemExit) && $!.success?)
是什么? - Nakilonexit
(或raise SystemExit
)并且退出代码成功(等于0
)引起的。 - tig