Spec-Zone.ru › Pony

Пакет сигналов

Пакет 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 на ваших обработчиках сигналов для завершения программы.

Публичные типы

  • интерфейс SignalNotify
  • примитив SignalRaise
  • актор SignalHandler
  • примитив Sig

© 2016-2020, The Pony Developers
© 2014-2015, Causality Ltd.
Licensed under the BSD 2-Clause License.
https://stdlib.ponylang.io/signals--index

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API