Function nix::sys::signal::signal

source ·
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:

lazy_static! {
   static ref 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.