use libc::c_int; use signal_hook::consts::signal::*; use signal_hook::low_level; use std::io::Error; #[cfg(feature = "extended-siginfo")] type Signals = signal_hook::iterator::SignalsInfo; #[cfg(not(feature = "extended-siginfo"))] use signal_hook::iterator::Signals; fn main() -> Result<(), Error> { const SIGNALS: &[c_int] = &[ SIGTERM, SIGQUIT, SIGINT, SIGTSTP, SIGWINCH, SIGHUP, SIGCHLD, SIGCONT, ]; let mut sigs = Signals::new(SIGNALS)?; for signal in &mut sigs { eprintln!("Received signal {:?}", signal); #[cfg(feature = "extended-siginfo")] let signal = signal.signal; // After printing it, do whatever the signal was supposed to do in the first place low_level::emulate_default_handler(signal)?; } Ok(()) }