【问题标题】:What happen if i erased process dictionary of gen_server module?如果我删除了 gen_server 模块的进程字典会怎样?
【发布时间】:2012-10-25 23:49:36
【问题描述】:

我正在使用 gen_server 模块中的进程字典,我调用了 get() 函数,我得到了类似的东西。

{'$ancestors',[main_server,<0.30.0>]},
{'$initial_call',{child_server,init,1}}]

如果我删除进程字典会发生什么,会出现什么问题?
我把它擦掉了,一切都很好,即使 调用在 child_server 中生成异常的函数 main_server 仍然可以获得退出信号。

【问题讨论】:

    标签: erlang erlang-otp gen-server process-dictionary


    【解决方案1】:

    $ancestors只在初始化阶段使用,用来获取父级的PID,用来捕捉来自父级的EXIT消息,这样terminate的东西就可以被执行。在服务器启动并运行时擦除此密钥没有任何区别。

    另一方面,$initial_call 在崩溃报告中被 proc_lib 用于转储 MFA 信息。

    OTP 源代码树中的快速grep 肯定会有所帮助。

    【讨论】:

      【解决方案2】:

      我认为某些调试函数可能会使用进程字典,例如 erlang:process_info/2

      【讨论】:

        猜你喜欢
        • 2021-06-06
        • 2011-10-21
        • 1970-01-01
        • 2016-08-03
        • 1970-01-01
        • 1970-01-01
        • 2011-01-15
        • 2015-12-29
        相关资源
        最近更新 更多