use std::sync::atomic::{AtomicBool, Ordering};
use std::sync::Arc;
use std::time::Duration;
use tokio::signal::unix::{signal, SignalKind};
#[tokio::main]
async fn main() {
let termination_requested = Arc::new(AtomicBool::new(false));
let sigterm_flag = termination_requested.clone();
tokio::spawn(async move {
let mut sigint = signal(SignalKind::interrupt()).expect("Failed to set up SIGINT handler");
sigint.recv().await;
println!("Received SIGINT signal. Shutting down gracefully...");
sigterm_flag.store(true, Ordering::SeqCst);
});
while !termination_requested.load(Ordering::SeqCst) {
println!("Running...");
tokio::time::sleep(Duration::from_secs(1)).await;
}
cleanup_and_shutdown();
}
fn cleanup_and_shutdown() {
println!("Cleanup and shutdown logic executed.");
}