Name

SPVM::Go::OS::Signal - Signal Manipulation

Description

Go::OS::Signal class in SPVM provides a way to handle OS signals using channels.

Usage

use Go::OS::Signal;
use Sys::Signal::Constant as SIGNAL;
use Sys;

Go::OS::Signal->start_signal_handler;

Go->go(method : void () {
  
  Fn->defer(method : void () {
    Go::OS::Signal->stop_signal_handler;
  });
  
  my $ch = Go->make(1);
  
  Go::OS::Signal->notify($ch, SIGNAL->SIGTERM);
  
  Sys->kill(SIGNAL->SIGTERM, Sys->process_id);
  
  my $signal = $ch->read;
  
});

Go->gosched;

Class Methods

ignore

static method ignore : void ($signal : int);

Ignores the signal $signal.

See Sys::Signal::Constant about the values of signals.

notify

static method notify : void ($channel : Go::Channel, $signal : int);

Creates a goroutine to read the sent signal and write it to the $channel.

See Sys::Signal::Constant about the values of signals.

stop

static method stop : void ($channel : Go::Channel, $signal : int);

Stops the signal handling for the signal $signal and the channel $channel.

See Sys::Signal::Constant about the values of signals.

start_signal_handler

static method start_signal_handler : void ();

Starts signal handling.

This method should be called before the first goroutine execution and "stop_signal_handler" method should be called at the beggining of the first goroutine execution using defer.

Go::OS::Signal->start_signal_handler;

Go->go(method : void () {
  
  Fn->defer(method : void () {
    Go::OS::Signal->stop_signal_handler;
  });
  
  # Do something
});

Go->gosched;

stop_signal_handler

static method stop_signal_handler : void ();

Stops signal handling. See "start_signal_handler" method about the usage.

Copyright & License

Copyright (c) 2023 Yuki Kimoto

MIT License