1 use libc::c_int;
2 use signal_hook::consts::signal::*;
3 use signal_hook::low_level;
4
5 use std::io::Error;
6
7 #[cfg(feature = "extended-siginfo")]
8 type Signals =
9 signal_hook::iterator::SignalsInfo<signal_hook::iterator::exfiltrator::origin::WithOrigin>;
10
11 #[cfg(not(feature = "extended-siginfo"))]
12 use signal_hook::iterator::Signals;
13
main() -> Result<(), Error>14 fn main() -> Result<(), Error> {
15 const SIGNALS: &[c_int] = &[
16 SIGTERM, SIGQUIT, SIGINT, SIGTSTP, SIGWINCH, SIGHUP, SIGCHLD, SIGCONT,
17 ];
18 let mut sigs = Signals::new(SIGNALS)?;
19 for signal in &mut sigs {
20 eprintln!("Received signal {:?}", signal);
21 #[cfg(feature = "extended-siginfo")]
22 let signal = signal.signal;
23 // After printing it, do whatever the signal was supposed to do in the first place
24 low_level::emulate_default_handler(signal)?;
25 }
26 Ok(())
27 }
28