4 releases (2 breaking)

0.3.1 Jan 8, 2022
0.3.0 Jan 26, 2021
0.2.0 Dec 21, 2020
0.1.0 Nov 22, 2020

#317 in Unix APIs

Download history 38874/week @ 2024-07-23 42083/week @ 2024-07-30 40650/week @ 2024-08-06 44808/week @ 2024-08-13 41962/week @ 2024-08-20 47592/week @ 2024-08-27 45545/week @ 2024-09-03 42340/week @ 2024-09-10 39789/week @ 2024-09-17 49053/week @ 2024-09-24 53211/week @ 2024-10-01 42714/week @ 2024-10-08 57232/week @ 2024-10-15 49290/week @ 2024-10-22 48949/week @ 2024-10-29 37675/week @ 2024-11-05

200,442 downloads per month
Used in 61 crates (41 directly)

Apache-2.0/MIT

125KB
1.5K SLoC

Signal-hook-tokio

Travis Build Status

This is a tokio 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 crate for integrating signal handling with the Tokio runtime.

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

Note that the futures-v0_3 feature of this crate must be enabled for Signals to implement the Stream trait.

Example

use std::io::Error;

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

use futures::stream::StreamExt;

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!(),
        }
    }
}

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

    let signals_task = tokio::spawn(handle_signals(signals));

    // Execute your main program logic

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

    Ok(())
}

Dependencies

~2.3–10MB
~91K SLoC