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
。