Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Erlang 我能';t在退出iex-S混合时触发终止回调_Erlang_Elixir - Fatal编程技术网

Erlang 我能';t在退出iex-S混合时触发终止回调

Erlang 我能';t在退出iex-S混合时触发终止回调,erlang,elixir,Erlang,Elixir,我有一个应用程序,它使用application模块,还有一个GenServer实例正在运行。此GenServer模块具有terminate回调 如果我强制在服务器实例内部发生一些错误,则回调可以正常工作,但如果我使用Ctrl-ca中止iex-S mix会话或仅关闭控制台窗口(它应该写入某个文件),则不会触发回调 我已尝试将其放入init(): 并在主模块中调用stop/1: def stop(state) do IO.puts "something" #never shown GenSe

我有一个应用程序,它使用
application
模块,还有一个
GenServer
实例正在运行。此
GenServer
模块具有
terminate
回调

如果我强制在服务器实例内部发生一些错误,则回调可以正常工作,但如果我使用
Ctrl-ca
中止
iex-S mix
会话或仅关闭控制台窗口(它应该写入某个文件),则不会触发回调

我已尝试将其放入
init()

并在主模块中调用
stop/1

def stop(state) do
  IO.puts "something" #never shown
  GenServer.stop(pid) #doesn't seem to work
end
发件人:

没有办法从内部捕捉突然的光束OS进程出口。这是一个自定义属性:BEAM进程突然终止,因此无法运行任何代码(因为它已终止)

因此,如果BEAM被粗暴终止,则不会调用回调

因此,一种解决方案是不使用
Ctrl-C
退出会话。相反,您可以尝试调用
:init.stop
,这将正常关闭监控树。

来自:

没有办法从内部捕捉突然的光束OS进程出口。这是一个自定义属性:BEAM进程突然终止,因此无法运行任何代码(因为它已终止)

因此,如果BEAM被粗暴终止,则不会调用回调

因此,一种解决方案是不使用
Ctrl-C
退出会话。相反,您可以尝试调用
:init.stop
,这将优雅地关闭监控树。

请参见:请参见:
def stop(state) do
  IO.puts "something" #never shown
  GenServer.stop(pid) #doesn't seem to work
end