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
Elixir 如何获取GenServer终止灵丹妙药_Elixir - Fatal编程技术网

Elixir 如何获取GenServer终止灵丹妙药

Elixir 如何获取GenServer终止灵丹妙药,elixir,Elixir,我有一个带有基本设置的DynamicSupervisor,我正在启动一个作为 Supervisor.start_child(Recording.WorkerStarter, %{ id: String.to_atom(detailed_camera.name), camera: detailed_camera, sleep: detailed_camera.sleep }) 并将其终止为 name |> Process.whereis() |> case do ni

我有一个带有基本设置的
DynamicSupervisor
,我正在启动一个作为

Supervisor.start_child(Recording.WorkerStarter, %{
  id: String.to_atom(detailed_camera.name),
  camera: detailed_camera,
  sleep: detailed_camera.sleep
})
并将其终止为

name
|> Process.whereis()
|> case do
  nil -> :not_found
  pid -> DynamicSupervisor.terminate_child(__MODULE__, pid)
end
我想捕捉它的终止,就像我终止这个孩子时,我想记录一些东西

我已经在
Recording.WorkerStarter
中测试了
terminate/2
,但它不会被调用

我试过处理信息({:DOWN,ref,:process,{,},state)它不起作用

我如何捕获
录制。WorkerStarter
终止

更新:

这是我的工人

defmodule Recording.WorkerStarter do
  use GenServer

  require Logger

  def start_link(opts) do
    IO.inspect("Started Recording.WorkerStarter")
    {id, opts} = Map.pop!(opts, :id)
    GenServer.start_link(__MODULE__, opts, name: id)
  end

  def init(state) do
    schedule_fetch_call(state.sleep)
    {:ok, state}
  end

我假设您从
init/1
回调返回
:stop
。关于各国的文件:

如果回调(除了
init/1
)[…]则调用
terminate/2


也就是说,您可能会通过并返回
:从那里停止
,或者在呼叫过程中存在陷阱。

我刚刚在elixir repo上看到您的PR,我知道您也会在这里回答:但我根本不懂答案。我更新了工人代码,你能告诉我这个终止将适合哪里吗?让
记录的主管。WorkerStarter
陷阱退出
进程。标志(:trap\u exit)
你会在那里收到
:DOWN
消息,然后调用
terminate/2