mirror of
https://github.com/tokio-rs/tokio.git
synced 2026-09-02 00:00:11 +02:00
Add an example for waiting on two signals
Relies on `Stream::select` to merge streams. Closes #16
This commit is contained in:
@@ -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");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Reference in New Issue
Block a user