I want to wait for SIGINT and SIGTERM. Is there a simple way to wait for an arbitrary number of signals?
This is a repost of this question because it was never answered.
I want to wait for SIGINT and SIGTERM. Is there a simple way to wait for an arbitrary number of signals?
This is a repost of this question because it was never answered.
You can use tokio::select!
to wait for various events.
use tokio::signal::unix::{signal, SignalKind};
tokio::select! {
_ = signal(SignalKind::interrupt())?.recv() => println!("SIGINT"),
_ = signal(SignalKind::terminate())?.recv() => println!("SIGTERM"),
}
println!("terminating the process...");
If you don't mind the dependency, there are crates for this. https://docs.rs/signal-hook/\*/signal_hook/ is one of them, and it comes with async adapters for various runtimes, for instance https://docs.rs/signal-hook-tokio/\*/signal_hook_tokio/.
tokio::signal
is backed by the signal-hook-registry
crate which is the backend of the signal-hook
crate.
This topic was automatically closed 90 days after the last reply. We invite you to open a new topic if you have further questions or comments.