2013-02-12 88 views
3

時,我有二郎應用。我運行它,沒關係,一切正常。當我通過Ctrl+C與我的應用程序一起殺死erlang shell時,我的應用程序也停止了,這是正確的行爲,但我怎麼能抓住這一刻?當我的應用程序停止運行時,我需要清除一些資源,正常或錯誤無關緊要。我嘗試清除gen_server:terminate中的資源,但是當我殺掉erlang shell時,它並未執行。我在哪裏可以捕捉到我的應用程序停止/被殺的時刻?抓被殺二郎應用

謝謝。

+1

http://stackoverflow.com/questions/5088586/how-can-i-handle-sigint-in-erlang的可能的複製。另外這款:http://erlang.org/pipermail/erlang-questions/2012-April/065595.html – nemo 2013-02-12 16:10:07

回答

3

當你做一個^C你不殺Erlang shell的你正在扼殺整個二郎系統,整個操作系統進程。那之後,所有的Erlang都死了。你想要做什麼?如果您想以受控方式取下整個系統,請使用init:stop/0/1。它將首先停止所有的申請和他們的監督樹,允許行爲正確終止。

+0

在外殼裏,你也可以撥打Q()。 – niahoo 2013-02-12 21:39:32

+0

它做同樣的事情,並調用'init:stop'。 – rvirding 2013-02-13 13:10:14