1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
use signal_hook::iterator::{exfiltrator::SignalOnly, SignalsInfo};
#[derive(Debug)]
pub struct SignalHandler {
pub(crate) signals: SignalsInfo<SignalOnly>,
pub(crate) termination_signals: Vec<i32>,
}
impl Default for SignalHandler {
fn default() -> Self {
use signal_hook::consts::*;
SignalHandler {
signals: SignalsInfo::new(&[SIGTERM, SIGINT, SIGCHLD]).unwrap(),
termination_signals: vec![SIGTERM, SIGINT],
}
}
}
impl SignalHandler {
pub fn add_termination_signal(&mut self, signal: i32) {
self.termination_signals.push(signal);
self.signals.add_signal(signal).unwrap();
}
}