1#[macro_use] extern crate lazy_static;
2extern crate signal_simple;
3
4use signal_simple::signal::{signal as sig, SIGTERM, SIGINT, int};
5use signal_simple::channel::SyncChannel;
6
7lazy_static! {
8 static ref TERM_HANDLER_CHANNEL: SyncChannel<()> = SyncChannel::new();
9}
10
11fn term_handler(_: int) {
12 TERM_HANDLER_CHANNEL.send(()).unwrap();
13}
14
15pub fn wait_for_term() {
16 sig(SIGTERM, term_handler, None);
17 sig(SIGINT, term_handler, None);
18
19 loop {
20 if let Ok(Some(_)) = TERM_HANDLER_CHANNEL.try_recv() {
21 break;
22 }
23 }
24}
25
26#[cfg(test)]
27mod tests {
28 use super::*;
29 use signal_simple::signal::kill;
30
31 #[test]
32 fn test_term() {
33 ::std::thread::spawn(|| {
34 ::std::thread::sleep(::std::time::Duration::from_secs(2));
35 kill(SIGTERM);
36 });
37 wait_for_term();
38 }
39}