我需要创建具有单向链接的流程。
grandparent <- parent <- child
这些进程完成了自己的工作并死亡,但被它们生成的进程所阻止。当子进程死亡时,父进程和祖进程也会死亡,但反过来不会。玩具示例的处理过程只是创建子进程并等待它们死亡:
(init)
(wait) <- (init)
(wait) <- (wait) <- (init)
(wait) <- (wait) <- (die)
(wait) <- (die)
(die)
为了使这个例子不是无限递归的,我们假设每个进程只有一个作业:在(init)
上,它抛出一个硬币,在正面上,它产生一个子进程,在反面上,它死亡。
在Erlang/OTP中有什么好的方法可以做到这一点?
1条答案
按热度按时间uoifb46i1#
每个父代都应监视其直接子代(例如,使用spawn_monitor)。
当一个被监视的进程终止时,VM向监视进程发送一条
{'DOWN', MonitorRef, process, Pid, Info}
消息,然后监视进程可以退出或抛出一个错误。例如: