【问题标题】:Erlang Linux signal handlingErlang Linux 信号处理
【发布时间】:2011-01-28 09:58:55
【问题描述】:

是否可以通过 Erlang 中的处理程序捕获 Linux 信号(例如 SIGUSR1)? (无需求助于用 C 语言制作的驱动程序)

【问题讨论】:

    标签: linux erlang signals


    【解决方案1】:

    (不是真正的答案)

    2001 年有人问:

    谁有unix的例子 erlang中的信号处理。我会 喜欢做一个负载均衡器,我 已书面回复叹息。

    当时的答案是:

    没有规定处理 Erlang“本身”中的信号,即你 将需要使用驱动程序 - 或端口 当然,实际上可能是一个 更好的主意。同样对于司机案例, 模拟器有自己的处理程序 信号数量和干扰 可能会有 “有趣”的结果 - 但 SIGHUP 我相信应该没问题。

    来源:http://www.erlang.org/pipermail/erlang-questions/2001-October/003752.html

    据我所知,从那以后没有任何变化。但这非常有趣。如果有人对此有任何消息,请告诉我们:)

    【讨论】:

      【解决方案2】:

      自 2017 年 6 月发布的 Erlang/OTP 20.0 以来,这是可能的。它是通过 this pull request 完成的,它为信号添加了一个名为 erl_signal_server 的事件管理器。请参阅the kernel manual page 中的“OS 信号事件处理程序”部分。

      如果您对 SIGUSR1 感兴趣,请注意默认处理程序将使 Erlang VM 停止并产生故障转储。为避免这种情况,将您自己的处理程序添加到erl_signal_server 是不够的;您必须为其交换默认处理程序:

      gen_event:swap_handler(erl_signal_server, {erl_signal_handler, []}, {foo, []}).
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-05-19
        • 1970-01-01
        • 1970-01-01
        • 2013-07-30
        • 2014-04-29
        • 1970-01-01
        • 2012-07-25
        相关资源
        最近更新 更多