【问题标题】:Elixir, test supervisor restart policyElixir,测试主管重启策略
【发布时间】:2016-01-23 21:03:00
【问题描述】:

我正在编写一个带有主管树的 OTP 应用程序。

主监督者监督两个进程,一个工人 QueueAddress 和另一个监督者 QueueManager,策略为one_for_one

QueueManager 监管一堆小队列,策略为simple_one_for_one,每启动一个新队列,其基本信息都会保存到QueueAddress中。

如果一个队列被杀死,它会被正确地重新启动。

现在我想测试如果主管 QueueManager 被杀死会发生什么。

但是,如果只是发送消息 Process.exit(QueueManager, :normal)Process.exit(QueueManager, :shutdown) 没有任何反应,则 QueueManager 的 PID 和受监督的小队列的 PID 都不会改变。

如果我发送消息Process.exit(QueueManager, :kill),整个应用程序都会崩溃。

我如何测试,如果 QueueManager 被杀死会发生什么?

在OTP树的图片下,我要杀Elixir.QueueManager

【问题讨论】:

  • 不是 Process.exit/2 仅适用于 pids 吗?您可以尝试执行类似 name |> Process.whereis |> Process.exit(:normal) 的操作

标签: elixir erlang-otp


【解决方案1】:

这很简单......

如果您想终止由 B 监督的主管 A,您可以执行以下操作:

Supervisor.terminate_child B, A

如果你想让主管 A 起死回生,你可以这样做:

Supervisor.restart_child B, A

【讨论】:

    猜你喜欢
    • 2012-04-03
    • 2012-11-06
    • 2016-01-06
    • 1970-01-01
    • 2016-06-04
    • 1970-01-01
    • 2019-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多