27 lines
851 B
Rust
27 lines
851 B
Rust
use libc::c_int;
|
|
use signal_hook::consts::signal::*;
|
|
use signal_hook::low_level;
|
|
|
|
use std::io::Error;
|
|
|
|
#[cfg(feature = "extended-siginfo")]
|
|
type Signals =
|
|
signal_hook::iterator::SignalsInfo<signal_hook::iterator::exfiltrator::origin::WithOrigin>;
|
|
|
|
#[cfg(not(feature = "extended-siginfo"))]
|
|
use signal_hook::iterator::Signals;
|
|
|
|
fn main() -> Result<(), Error> {
|
|
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(())
|
|
}
|