erlang 具有单向链接的进程

ijnw1ujt  于 2022-12-08  发布在  Erlang
关注(0)|答案(1)|浏览(217)

我需要创建具有单向链接的流程。

grandparent <- parent <- child

这些进程完成了自己的工作并死亡,但被它们生成的进程所阻止。当子进程死亡时,父进程和祖进程也会死亡,但反过来不会。玩具示例的处理过程只是创建子进程并等待它们死亡:

(init)
(wait) <- (init)
(wait) <- (wait) <- (init)
(wait) <- (wait) <- (die)
(wait) <- (die)
(die)

为了使这个例子不是无限递归的,我们假设每个进程只有一个作业:在(init)上,它抛出一个硬币,在正面上,它产生一个子进程,在反面上,它死亡。
在Erlang/OTP中有什么好的方法可以做到这一点?

uoifb46i

uoifb46i1#

每个父代都应监视其直接子代(例如,使用spawn_monitor)。
当一个被监视的进程终止时,VM向监视进程发送一条{'DOWN', MonitorRef, process, Pid, Info}消息,然后监视进程可以退出或抛出一个错误。
例如:

{Pid, MonitorRef} = spawn_monitor(?MODULE, child, []),
  receive {'DOWN', MonitorRef, process, Pid, Info} -> exit(Info) end.

相关问题