使用Erlang管理器时,我是否可以执行代码以响应子级退出?

使用Erlang管理器时,我是否可以执行代码以响应子级退出?,erlang,otp,Erlang,Otp,当孩子退出(正常或出错)时,我想采取一些措施。我是否使用erlang:monitor/2?如果是这样,我如何得到pid?另外,我能看到它为什么停止吗?是的,监视器将完成这项工作 您将返回:{'DOWN',monitoref,Type,Object,Info} 其中,对象是pid,信息是退出原因 你也可以使用link和trap_exit,但是链接是双向的,所以如果父母去世,你会带孩子出去 获取子进程PID的最简单方法是让子进程在启动时向侦听器(使用监视器的侦听器)注册自己。让它发送self(),然

当孩子退出(正常或出错)时,我想采取一些措施。我是否使用erlang:monitor/2?如果是这样,我如何得到pid?另外,我能看到它为什么停止吗?

是的,监视器将完成这项工作

您将返回:
{'DOWN',monitoref,Type,Object,Info}

其中,对象是pid,信息是退出原因

你也可以使用link和trap_exit,但是链接是双向的,所以如果父母去世,你会带孩子出去


获取子进程PID的最简单方法是让子进程在启动时向侦听器(使用监视器的侦听器)注册自己。让它发送self(),然后侦听器可以监视该PID。

好的,那么如何将PID传递给监视器?如果是您的子进程,您必须将其跳过,不是吗?记住伊托克,请原谅我的困惑,但我不认为这孩子是我自己生的。我从init()中返回了一个子规范,是主管库启动的,不是吗?你说的是启动流程的某个主管的子规范?当你说孩子时,我以为你的意思是你有一个生成孩子的gen_服务器。这样做的最简单方法是让您想要执行操作的gen_服务器充当注册表。child启动并执行gen_server:cast(registry_guy,{register_me,self()})。将执行操作的进程应该注册为“registry\u guy”,然后在handle\u cast中,您获得{register\u me,Pid}并监视该Pid。。。然后你会看到他们死去。。。有道理吗?哈哈!这就是我需要的。谢谢我编辑了答案,将其包括在内。