Task.Supervisor.start_child / 2启动的进程退出时如何调用函数?

时间:2018-07-12 10:44:41

标签: erlang elixir otp

如果实现 <?php include 'controller.php'; $Nelsons = $King->query("SELECT * FROM messages WHERE receiver='$boy' AND read2=''"); $ccc = $Nelsons->num_rows; echo $ccc; ?> 模块,请添加GenServer函数。但是由terminate/2开始的过程并不知道该怎么做。

1 个答案:

答案 0 :(得分:-1)

让我们看一下代码,并逐步进行操作。
主管中的每个孩子都有一些开始,停止,重新注视的选项,称为子规范或子规范。主管使用子规范中的start选项启动子进程。 Here开始很有趣,而start选项将是{erlang, apply, [Fun]}。同样,here开始可以是Module and function,其参数和start选项将是{Module, Function, Args}start_child/3start_child/5都调用start_child_with_spec/4,其中here会调用此动态主管来启动任务。
动态主管here处理此呼叫。此子句将start_task请求转换为start_child请求,并运行下一个语句here。 最后,在handle_start_child函数中,如果{Module, Function, Args}{erlang, apply, [Fun]}产生{ok, Pid}{ok, Pid, _},则Supervisor会将pid及其规范保存为子代。
因此,调用MFA或Fun应该会产生新的pid或pid。这个新过程可以使用erlang:process_flag(trap_exit, true)捕获退出信号,并将退出信号转换为代码中{'EXIT', Pid, ReasonOfCrash}形式的erlang消息。