mirror of
https://github.com/tokio-rs/tokio.git
synced 2025-09-28 12:10:37 +00:00
signal: Add an example for waiting on two signals
Relies on `Stream::select` to merge streams. Closes alexcrichton/tokio-signal#16
This commit is contained in:
parent
d41c60e21d
commit
9bf3228f73
38
examples/multiple.rs
Normal file
38
examples/multiple.rs
Normal file
@ -0,0 +1,38 @@
|
||||
//! A small example of how to listen for two signals at the same time
|
||||
|
||||
extern crate futures;
|
||||
extern crate tokio_core;
|
||||
extern crate tokio_signal;
|
||||
|
||||
use futures::{Stream, Future};
|
||||
use tokio_core::reactor::Core;
|
||||
use tokio_signal::unix::{Signal, SIGINT, SIGTERM};
|
||||
|
||||
fn main() {
|
||||
let mut core = Core::new().unwrap();
|
||||
let handle = core.handle();
|
||||
|
||||
// Create a stream for each of the signals we'd like to handle.
|
||||
let sigint = Signal::new(SIGINT, &handle).flatten_stream();
|
||||
let sigterm = Signal::new(SIGTERM, &handle).flatten_stream();
|
||||
|
||||
// Use the `select` combinator to merge these two streams into one
|
||||
let stream = sigint.select(sigterm);
|
||||
|
||||
// Wait for a signal to arrive
|
||||
println!("Waiting for SIGINT or SIGTERM");
|
||||
println!(" TIP: use `pkill -sigint multiple` from a second terminal \
|
||||
to send a SIGINT to all processes named 'multiple' \
|
||||
(i.e. this binary)");
|
||||
let (item, _rest) = core.run(stream.into_future()).ok().unwrap();
|
||||
|
||||
// Figure out which signal we received
|
||||
let item = item.unwrap();
|
||||
if item == SIGINT {
|
||||
println!("received SIGINT");
|
||||
} else {
|
||||
assert_eq!(item, SIGTERM);
|
||||
println!("received SIGTERM");
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user