pub unsafe fn signal(signal: Signal, handler: SigHandler) -> Result<SigHandler>Expand description
Signal management (see signal(3p))
Installs handler for the given signal, returning the previous signal
handler. signal should only be used following another call to signal or
if the current handler is the default. The return value of signal is
undefined after setting the handler with sigaction.
§Safety
If the pointer to the previous signal handler is invalid, undefined
behavior could be invoked when casting it back to a SigAction.
§Examples
Ignore SIGINT:
unsafe { signal::signal(Signal::SIGINT, SigHandler::SigIgn) }.unwrap();Use a signal handler to set a flag variable:
static SIGNALED: AtomicBool = AtomicBool::new(false);
extern fn handle_sigint(signal: libc::c_int) {
let signal = Signal::try_from(signal).unwrap();
SIGNALED.store(signal == Signal::SIGINT, Ordering::Relaxed);
}
fn main() {
let handler = SigHandler::Handler(handle_sigint);
unsafe { signal::signal(Signal::SIGINT, handler) }.unwrap();
}§Errors
Returns [Error(Errno::EOPNOTSUPP)] if handler is
SigAction. Use sigaction instead.
signal also returns any error from libc::signal, such as when an attempt
is made to catch a signal that cannot be caught or to ignore a signal that
cannot be ignored.