Open
Description
It would be great to have a SIGTERM
signal before being killed, this could allow test program that want test signal handling, a fair delay between the two signal could be 1 seconde. SIGTERM
is often used to allow such gracefully termination for example in docker. Example of program that test signal handling playground:
use core::time::Duration;
use tokio::{
select,
signal::unix::{signal, SignalKind},
sync::watch,
time::sleep,
};
#[tokio::main]
async fn main() {
let (stop_tx, mut 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() => {},
_ = sigint.recv() => {},
};
stop_tx.send(()).unwrap();
}
});
loop {
select! {
biased;
_ = stop_rx.changed() => break,
i = some_operation(42) => { println!("Recieve {i}")},
}
}
}
async fn some_operation(i: u64) -> u64 {
println!("Task started.");
sleep(Duration::from_millis(i)).await;
println!("Task shutting down.");
i
}