我正在编写一个带有超级用户树的OTP应用程序。
主要主管用策略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
答案 0 :(得分:2)
这很简单......
如果你想终止主管A,由B监督,你可以这样做:
Supervisor.terminate_child B, A
如果你想让B主管监督A恢复生机,你可以做到:
Supervisor.restart_child B, A