2013-07-19 22 views
0

As described here,乘客將分叉我的過程,我需要恢復我的後臺線程。我這樣做,它通常工作,但有時我的過程在我的後臺線程完成之前終止。我在後臺線程上做的所有事情都是排隊處理一堆數據,所以我可以在更大的塊中更高效地發送它。 I just asked a similar question,但我有一個新的想法:我想知道如果我能爲類似這樣的回調註冊:Can Phusion乘客可否通知我即將終止我的程序?

PhusionPassenger.on_event(:starting_worker_process) do |forked|... 

而是對:starting_worker_process事件,我希望得到通知,我的過程是關於被終止,所以我可以快速沖洗我的緩衝區並離開。有這樣的事件嗎?

回答

1

內核提供了#at_exit可用於此。

at_exit do 
    # Cleanup 
end 
+0

謝謝,克里斯。我已經在那裏,但它似乎並沒有被乘客叫到。在獨立的紅寶石應用程序,它完美的作品。我立即刷新緩衝區,並且所有的數據都通過了。乘客實際上是否會殺死我的流程,或者讓他們入睡?我會嘗試尋找SIGKILL等。當我得到'kill -9'時,我應該期望'at_exit'觸發嗎? – Daiku

+0

Passenger會在他們不活動的時間足夠長的時間內終止進程,儘管我不確定它使用哪種機制來做到這一點。 'kill -9'會發送SIGKILL,不能被發現或處理。你有沒有考慮過使用類似日誌文件的東西來恢復意外終止? –