File: print.rs

package info (click to toggle)
rust-signal-hook 0.3.17-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 344 kB
  • sloc: ansic: 46; sh: 14; makefile: 2
file content (31 lines) | stat: -rw-r--r-- 1,062 bytes parent folder | download | duplicates (2)
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"))
}