Erlang Linux обработка сигналов - PullRequest
16 голосов
/ 17 марта 2010

Можно ли перехватывать сигналы Linux (например, SIGUSR1) через обработчик в Erlang? (не прибегая к помощи драйвера, созданного в C)

Ответы [ 2 ]

5 голосов
/ 17 марта 2010

(НЕ НАСТОЯЩИЙ ОТВЕТ)

В 2001 году кто-то спросил:

У кого-нибудь есть примеры unix обработка сигналов в эрланге. я мог бы хотел бы сделать loadbalancer, что я написал ответ на вздох.

В то время ответ был:

Нет условий для обработки сигналы в Erlang "себя", т.е. вы нужно будет использовать драйвер - или порт Программа, конечно, на самом деле может быть лучшая идея. Также для случая с водителем, эмулятор имеет свой собственный обработчик количество сигналов и мешающих с этим, вероятно, придется "интересные" результаты - но SIGHUP должно быть в порядке, я считаю.

ИСТОЧНИК: http://www.erlang.org/pipermail/erlang-questions/2001-October/003752.html

Насколько я знаю, с тех пор ничего не изменилось. Но это чрезвычайно интересно. Если у кого-то есть новости по этому поводу, пожалуйста, сообщите нам:)

2 голосов
/ 26 января 2017

Это возможно начиная с версии Erlang / OTP 20.0, выпущенной в июне 2017 года. Это было выполнено через этот запрос на извлечение , который добавляет диспетчер событий для сигналов, называемых erl_signal_server. См. Раздел «Обработчик сигналов ОС» в на странице kernel руководства .

Если вас интересует SIGUSR1, обратите внимание, что обработчик по умолчанию остановит Erlang VM и создаст аварийный дамп. Чтобы избежать этого, недостаточно добавить собственный обработчик в erl_signal_server; Вы должны поменять местами обработчик по умолчанию:

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