print/
print.rs

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