【发布时间】:2020-03-15 01:49:10
【问题描述】:
我正在阅读 Little Elixir 和 OTP Guidebook 来学习 Elixir,书中有一章作者从零开始构建了一个 Supervisor。有一部分作者实现了一个函数来终止 Supervisor 进程,该进程反过来也会在终止自身之前终止与其链接的所有子进程。
据我了解,如果您有链接到特定进程的进程,并且如果其中一个被杀死,那么它们都被杀死,对吗?那么为什么我们需要在杀死主管之前杀死所有的子进程,这只是一个最佳实践吗?
这本书是这么说的
在您终止之前 主管进程,你需要终止它所链接的所有子进程,这由 terminate_children/1 私有函数处理,
defmodule ThySupervisor do
use GenServer
######################
# Callback Functions #
######################
def terminate(_reason, state) do
terminate_children(state)
:ok
end
#####################
# Private Functions #
#####################
defp terminate_children([]) do
:ok
end
defp terminate_children(child_specs) do
child_specs |> Enum.each(fn {pid, _} -> terminate_child(pid) end)
end
defp terminate_child(pid) do
Process.exit(pid, :kill)
:ok
end
end
【问题讨论】:
标签: elixir