#tokio #signal #unix

signal-hook-tokio

Tokio对signal-hook的支持

4个版本 (2个重大更新)

0.3.1 2022年1月8日
0.3.0 2021年1月26日
0.2.0 2020年12月21日
0.1.0 2020年11月22日

#193异步

Download history 39185/week @ 2024-03-14 35339/week @ 2024-03-21 50951/week @ 2024-03-28 35824/week @ 2024-04-04 32936/week @ 2024-04-11 37638/week @ 2024-04-18 33982/week @ 2024-04-25 31403/week @ 2024-05-02 35657/week @ 2024-05-09 39498/week @ 2024-05-16 39390/week @ 2024-05-23 35185/week @ 2024-05-30 40766/week @ 2024-06-06 36748/week @ 2024-06-13 39288/week @ 2024-06-20 35062/week @ 2024-06-27

158,612 每月下载量
用于 59 个开源软件包 (41个直接使用)

Apache-2.0/MIT

125KB
1.5K SLoC

Signal-hook-tokio

Travis Build Status

这是signal-hook库的Tokio适配器。有关更多详细信息,请参阅文档

许可协议

根据以下任一许可协议授权

供您选择。

贡献

除非您明确说明,否则根据Apache-2.0许可协议定义,您有意提交的任何贡献都将按照上述方式双重授权,不附加任何额外的条款或条件。


lib.rs:

一个用于将信号处理与Tokio运行时集成的库。

这提供了一个[Signals][Signals]结构体,它充当信号的Stream

请注意,必须启用此库的futures-v0_3功能,才能使Signals实现Stream特质。

示例

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

依赖关系

~2–11MB
~94K SLoC