22 lines
612 B
Rust
22 lines
612 B
Rust
use tokio::{
|
|
select,
|
|
signal::unix::{signal, SignalKind},
|
|
sync::watch,
|
|
};
|
|
|
|
pub(crate) fn signal_handler() -> watch::Receiver<()> {
|
|
let (stop_tx, stop_rx) = watch::channel(());
|
|
tokio::spawn(async move {
|
|
let mut sigterm = signal(SignalKind::terminate()).unwrap();
|
|
let mut sigint = signal(SignalKind::interrupt()).unwrap();
|
|
loop {
|
|
select! {
|
|
_ = sigterm.recv() => println!("Receive SIGTERM"),
|
|
_ = sigint.recv() => println!("Receive SIGTERM"),
|
|
};
|
|
stop_tx.send(()).unwrap();
|
|
}
|
|
});
|
|
stop_rx
|
|
}
|