终止erlang应用程序时捕获

终止erlang应用程序时捕获,erlang,terminate,otp,Erlang,Terminate,Otp,我有一个erlang应用程序。我运行它,一切正常。当我用我的应用程序用Ctrl+C杀死erlang shell时,我的应用程序也停止了,这是正确的行为,一切正常,但我怎么能抓住这一刻呢?我需要清除一些资源时,我的应用程序停止,正常或与错误,这并不重要。我试图清理gen_server:terminate中的资源,但当我杀死erlangshell时,它没有执行。我在哪里可以捕捉到我的应用程序被停止/终止的时刻 谢谢。当您执行^C时,您并不是在杀死Erlang外壳,而是在杀死整个Erlang系统,整个

我有一个erlang应用程序。我运行它,一切正常。当我用我的应用程序用
Ctrl+C
杀死erlang shell时,我的应用程序也停止了,这是正确的行为,一切正常,但我怎么能抓住这一刻呢?我需要清除一些资源时,我的应用程序停止,正常或与错误,这并不重要。我试图清理
gen_server:terminate
中的资源,但当我杀死erlangshell时,它没有执行。我在哪里可以捕捉到我的应用程序被停止/终止的时刻


谢谢。

当您执行
^C
时,您并不是在杀死Erlang外壳,而是在杀死整个Erlang系统,整个操作系统进程。所以在那之后,所有的Erlang都死了。你想做什么?如果要以受控方式关闭整个系统,请使用
init:stop/0/1
。它将首先停止所有应用程序及其监控树,以允许行为正确终止。

可能的重复。还有:在shell中,您还可以调用q(),它执行相同的操作并调用
init:stop