1#[macro_use]
2extern crate chan;
3extern crate chan_signal;
4
5use std::thread;
6use std::time::Duration;
7
8use chan_signal::Signal;
9
10fn main() {
11 let signal = chan_signal::notify(&[Signal::INT, Signal::TERM]);
13 let (sdone, rdone) = chan::sync(0);
15 thread::spawn(move || run(sdone));
17
18 chan_select! {
20 signal.recv() -> signal => {
21 println!("received signal: {:?}", signal)
22 },
23 rdone.recv() => {
24 println!("Program completed normally.");
25 }
26 }
27}
28
29fn run(_sdone: chan::Sender<()>) {
30 println!("Running work for 5 seconds.");
31 println!("Can you send a signal quickly enough?");
32 thread::sleep(Duration::from_secs(5));
34}