1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
use libc::c_int;
use signal_hook::consts::signal::*;
use signal_hook::low_level;
use std::io::Error;
use std::io::ErrorKind;
#[cfg(feature = "extended-siginfo")]
type Signals =
signal_hook::iterator::SignalsInfo<signal_hook::iterator::exfiltrator::origin::WithOrigin>;
#[cfg(feature = "iterator")]#[cfg(not(feature = "extended-siginfo"))]
use signal_hook::iterator::Signals;
fn main() -> Result<(), Error> {
#[cfg(feature = "iterator")] {
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(())
}
#[cfg(not(feature = "iterator"))]Err(Error::new(ErrorKind::Unsupported,"this example requires the 'iterator' feature"))
}
|