2 unstable releases
0.2.0 | Feb 8, 2023 |
---|---|
0.1.0 | Jun 10, 2019 |
#258 in Asynchronous
17KB
255 lines
async-signal
Asynchronous signal handling.
This crate provides the Signals
type, which can be used to listen for POSIX signals asynchronously. It can be seen as an asynchronous version of signal_hook::iterator::Signals
.
As of the time of writing, this crate is unix
-only.
Implementation
This crate uses the signal_hook_registry
crate to register a listener for each signal. That listener will then send a message through a Unix socket to the Signals
type, which will receive it and notify the user. Asynchronous notification is done through the async-io
crate.
Examples
use async_signal::{Signal, Signals};
use futures_lite::prelude::*;
use signal_hook::low_level;
// Register the signals we want to receive.
let signals = Signals::new(&[
Signal::Term,
Signal::Quit,
Signal::Int,
])?;
// Wait for a signal to be received.
while let Some(signal) = signals.next().await {
// Print the signal.
eprintln!("Received signal {:?}", signal);
// After printing it, do whatever the signal was supposed to do in the first place.
low_level::emulate_default_handler(signal.unwrap() as i32).unwrap();
}
License
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
Dependencies
~2.4–7.5MB
~132K SLoC