1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
use futures::future::{self, Either, FutureExt};
use log::info;
use std::io;
use tokio::signal::unix::{signal, SignalKind};
pub async fn create_signal_monitor() -> io::Result<()> {
let mut sigterm = signal(SignalKind::terminate())?;
let mut sigint = signal(SignalKind::interrupt())?;
let signal_name = match future::select(sigterm.recv().boxed(), sigint.recv().boxed()).await {
Either::Left(..) => "SIGTERM",
Either::Right(..) => "SIGINT",
};
info!("received {}, exiting", signal_name);
Ok(())
}