• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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