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