1use tokio::signal;
4
5pub async fn shutdown_signal() {
7 let ctrl_c = async {
8 signal::ctrl_c()
9 .await
10 .expect("Failed to install Ctrl+C handler");
11 };
12
13 #[cfg(unix)]
14 let terminate = async {
15 signal::unix::signal(signal::unix::SignalKind::terminate())
16 .expect("Failed to install signal handler")
17 .recv()
18 .await;
19 };
20
21 #[cfg(not(unix))]
22 let terminate = std::future::pending::<()>();
23
24 tokio::select! {
25 _ = ctrl_c => {
26 tracing::info!("juicehost shutting down...");
27 },
28 _ = terminate => {
29 tracing::info!("juicehost terminated...");
30 },
31 }
32}