Пакет сигналов
Пакет Signals предоставляет поддержку обработки сигналов в стиле Unix. Для каждого сигнала, который вы хотите обработать, необходимо создать SignalHandler и соответствующий SignalNotify объект. Каждый SignalHandler работает как собственный актёр и при получении сигнала вызовет метод apply соответствующего SignalNotify.
Пример программы
Следующая программа будет слушать сигнал TERM и выводить сообщение в стандартный вывод, если он будет получен.
use "signals"
actor Main
new create(env: Env) =>
// Create a TERM handler
let signal = SignalHandler(TermHandler(env), Sig.term())
// Raise TERM signal
signal.raise()
class TermHandler is SignalNotify
let _env: Env
new iso create(env: Env) =>
_env = env
fun ref apply(count: U32): Bool =>
_env.out.print("TERM signal received")
true
Переносимость сигналов
Примитив Sig обеспечивает поддержку переносимой обработки сигналов на Linux, FreeBSD и OSX. Сигналы не поддерживаются в Windows, и попытка их использования вызовет ошибку компиляции.
Выключение обработчиков
В отличие от TCPConnection и других форм приема ввода, создание SignalHandler не будет удерживать вашу программу работающей. Поэтому вам не нужно вызывать dispose на ваших обработчиках сигналов для завершения программы.
Публичные типы
© 2016-2020, The Pony Developers
© 2014-2015, Causality Ltd.
Licensed under the BSD 2-Clause License.
https://stdlib.ponylang.io/signals--index