omni_dev/daemon/
lifecycle.rs1use tokio_util::sync::CancellationToken;
5
6pub fn install_signal_handlers(shutdown: CancellationToken) {
15 #[cfg(unix)]
16 {
17 use tokio::signal::unix::{signal, SignalKind};
18 tokio::spawn(async move {
19 let mut term = match signal(SignalKind::terminate()) {
20 Ok(s) => s,
21 Err(e) => {
22 tracing::warn!("failed to install SIGTERM handler: {e}");
23 return;
24 }
25 };
26 let mut interrupt = match signal(SignalKind::interrupt()) {
27 Ok(s) => s,
28 Err(e) => {
29 tracing::warn!("failed to install SIGINT handler: {e}");
30 return;
31 }
32 };
33 let mut hangup = match signal(SignalKind::hangup()) {
34 Ok(s) => s,
35 Err(e) => {
36 tracing::warn!("failed to install SIGHUP handler: {e}");
37 return;
38 }
39 };
40 tokio::select! {
41 _ = term.recv() => tracing::info!("received SIGTERM; shutting down"),
42 _ = interrupt.recv() => tracing::info!("received SIGINT; shutting down"),
43 _ = hangup.recv() => tracing::info!("received SIGHUP; shutting down"),
44 }
45 shutdown.cancel();
46 });
47 }
48 #[cfg(not(unix))]
49 {
50 tokio::spawn(async move {
51 if tokio::signal::ctrl_c().await.is_ok() {
52 tracing::info!("received Ctrl-C; shutting down");
53 shutdown.cancel();
54 }
55 });
56 }
57}