use tokio::signal::unix::{SignalKind, signal};
use tokio_util::sync::CancellationToken;
pub fn spawn_handler(token: CancellationToken) {
tokio::spawn(async move {
let mut term = signal(SignalKind::terminate()).expect("install SIGTERM handler");
let mut int = signal(SignalKind::interrupt()).expect("install SIGINT handler");
let mut hup = signal(SignalKind::hangup()).expect("install SIGHUP handler");
loop {
tokio::select! {
_ = term.recv() => { tracing::info!("received SIGTERM"); token.cancel(); break; }
_ = int.recv() => { tracing::info!("received SIGINT"); token.cancel(); break; }
_ = hup.recv() => tracing::info!("received SIGHUP (config reload not yet implemented)"),
}
}
});
}