Elixir,测试主管重启政策

时间:2015-10-24 10:53:50

标签: elixir otp

我正在编写一个带有超级用户树的OTP应用程序。

主要主管用策略one_for_one

监督两个进程,一个工作者QueueAddress和另一个主管QueueManager

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

The OTP tree

1 个答案:

答案 0 :(得分:2)

这很简单......

如果你想终止主管A,由B监督,你可以这样做:

Supervisor.terminate_child B, A

如果你想让B主管监督A恢复生机,你可以做到:

Supervisor.restart_child B, A