#async-std #signal #unix

signal-hook-async-std

async-std support for signal-hook

4 releases

0.2.2 Jan 8, 2022
0.2.1 Jan 31, 2021
0.2.0 Dec 21, 2020
0.1.0 Nov 22, 2020

#639 in Operating systems

Download history 1948/week @ 2023-12-06 1938/week @ 2023-12-13 1433/week @ 2023-12-20 1092/week @ 2023-12-27 1924/week @ 2024-01-03 2138/week @ 2024-01-10 2044/week @ 2024-01-17 2142/week @ 2024-01-24 2053/week @ 2024-01-31 2051/week @ 2024-02-07 1490/week @ 2024-02-14 1483/week @ 2024-02-21 2087/week @ 2024-02-28 2062/week @ 2024-03-06 2110/week @ 2024-03-13 1992/week @ 2024-03-20

8,545 downloads per month
Used in 17 crates (9 directly)

Apache-2.0/MIT

125KB
1.5K SLoC

Signal-hook-async-std

Travis Build Status

This is a async-std adapter crate for the signal-hook crate. See the documentation for further details.

License

Licensed under either of

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.


lib.rs:

A module for integrating signal handling with the async-std runtime.

This provides the Signals struct which acts as a Stream of signals.

Example

use std::io::Error;

use async_std::prelude::*;

use signal_hook::consts::signal::*;
use signal_hook_async_std::Signals;

async fn handle_signals(mut signals: Signals) {
    while let Some(signal) = signals.next().await {
        match signal {
            SIGHUP => {
                // Reload configuration
                // Reopen the log file
            }
            SIGTERM | SIGINT | SIGQUIT => {
                // Shutdown the system;
            },
            _ => unreachable!(),
        }
    }
}

#[async_std::main]
async fn main() -> Result<(), Error> {
    let signals = Signals::new(&[SIGHUP, SIGTERM, SIGINT, SIGQUIT])?;
    let handle = signals.handle();

    let signals_task = async_std::task::spawn(handle_signals(signals));

    // Execute your main program logic

    // Terminate the signal stream.
    handle.close();
    signals_task.await;

    Ok(())
}

Dependencies

~3–14MB
~152K SLoC