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