#async-std #signal #unix

signal-hook-async-std

为signal-hook提供async-std支持

4个版本

0.2.2 2022年1月8日
0.2.1 2021年1月31日
0.2.0 2020年12月21日
0.1.0 2020年11月22日

#618 in 操作系统

Download history 2125/week @ 2024-03-14 2367/week @ 2024-03-21 2513/week @ 2024-03-28 2108/week @ 2024-04-04 2080/week @ 2024-04-11 2199/week @ 2024-04-18 2383/week @ 2024-04-25 2224/week @ 2024-05-02 1846/week @ 2024-05-09 1773/week @ 2024-05-16 1649/week @ 2024-05-23 2641/week @ 2024-05-30 1452/week @ 2024-06-06 1440/week @ 2024-06-13 1929/week @ 2024-06-20 1671/week @ 2024-06-27

7,051 每月下载次数
17 个crate中使用 (9 直接使用)

Apache-2.0/MIT

125KB
1.5K SLoC

Signal-hook-async-std

Travis Build Status

这是一个signal-hook crate的async-std适配crate。有关更多详细信息,请参阅文档

许可协议

根据以下任一协议许可:

任选其一。

贡献

除非您明确声明,否则根据Apache-2.0许可证定义,您有意提交的任何贡献,均应按照上述方式双许可,不附加任何额外条款或条件。


lib.rs:

一个用于将信号处理与async-std运行时集成的模块。

这提供了Signals结构体,该结构体作为信号Stream

示例

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

依赖项

~3–15MB
~157K SLoC