我想作为特定主管的孩子开始几个过程。重启策略为one_for_one
根据我的需要,每个终止的进程应在给定的时间(例如20秒)后重新启动。
如何做到这一点?可能在init或终止函数中有延迟并结合:
Shutdown = brutal_kill | integer() >=0 | infinity
有没有更好的方法来实现这一目标?
答案 0 :(得分:3)
请勿使用init/1
。当init正在运行时,主管被阻止。最好立即启动该过程,但只有在等待20秒后才让它自己注册这样的操作。您可以在init中使用简单的erlang:send_after(..)
调用来触发此启动延迟。
我也不喜欢终止的事情。也许有一个关闭状态,在终止之前你会留一点。这也许可以确保在你做的时候没有其他人跑。如果您能控制何时关闭,我建议您这样做。只需输入此状态,然后等待上述定时器触发器。请注意,此解决方案只会在宽限期(文件,ETS表,套接字)之后释放外部资源 - 除非明确释放。