2009-07-17 96 views
11

我可以在at_exit塊中確定自己的進程退出狀態嗎?ruby​​ at_exit退出狀態

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

回答

14

使用想法從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 
17

儘管關於此的文檔非常薄,但$!被設置爲發生的最後一個異常,並且在exit()調用之後,這是一個SystemExit異常。把那兩個聚一聚這樣的:

at_exit do 
    if ($!.success?) 
    print 'Success' 
    else 
    print 'Failure' 
    end 
end 
+0

這將是唯一的,如果出口將被調用的情況。 當然我可以測試$!是零還是SystemExit成功回答真實? 但是有可能獲得Process :: Status對象,或者它不是爲頂級進程創建的嗎? – tig 2009-07-18 12:12:23

+0

使用你的想法我得到的答案和張貼,但我不知道哪個答案更好地標記 - 你的或我的? – tig 2009-07-20 16:52:01