11个稳定版本
使用旧的Rust 2015
1.4.2 | 2024年4月21日 |
---|---|
1.4.1 | 2023年2月11日 |
1.4.0 | 2021年6月1日 |
1.3.0 | 2020年12月21日 |
1.1.0 | 2019年7月27日 |
在操作系统类别中排名第133
每月下载量达6,599,244次
在7,724 个crate中(直接使用18个)
43KB
534 行
Signal-hook-registry
这是signal-hook crate的后端库。不建议直接使用此crate。有关详细信息,请参阅文档。
许可协议
许可协议为以下之一:
- Apache License, Version 2.0, (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT许可协议 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
贡献
除非你明确说明,否则根据Apache-2.0许可证定义,你有意提交的任何贡献,包括但不限于代码、文档、示例、问题报告、功能请求等,都应作为上述双重许可发布,不附加任何额外条款或条件。
lib.rs
:
signal-hook crate的后端。
signal-hook crate试图提供对Unix信号的API,这些信号是全局资源。因此,最好在一个应用程序中只包含一个crate来管理这个全局资源。但这使得在API中做出破坏性更改变得不可能。
因此,此crate提供了非常最小化和低级别的信号API,不太可能需要更改,而可能有多个版本的signal-hook,它们都使用此低级别API提供不同版本的高级API。
也可能有些其他crate想要构建一个完全不同的API。这种分割允许这些crate在crate中重用相同的低级例程,而不是进行(危险得多的)Unix调用。
此crate提供的功能
此crate所做的唯一一件事是信号复用。应用程序或库可以添加或删除回调,并为同一信号拥有多个回调。
它通过信号处理程序内部仅使用异步信号安全函数的方式来调度回调并管理它们。请注意,回调仍在信号处理程序内部运行,因此确保它们也是异步信号安全的责任在于调用者。
这是为什么
这是其他库构建在信号之上的合理抽象的构建块。如果需要在应用程序中处理信号,通常首选signal-hook,它提供了一些处理信号的安全模式。
Rust版本兼容性
目前支持1.26.0及更高版本,这很不太可能改变。然而,测试需要在该环境中无法构建的依赖,因此需要较新的Rust版本(在稳定版上运行)。
可移植性
此crate基于CRT中的signal
/raise
提供对Windows的有限支持。API和行为存在差异。
- 由于缺少
siginfo_t
,我们不提供register_sigaction
或register_unchecked
。 - 由于缺少信号阻塞,存在竞态条件。在调用
signal
之后,会有一个时刻我们错过了一个信号。这意味着当您注册处理程序时,可能存在一个既不调用默认处理程序也不调用您注册的处理程序的信号。 - 在Windows上,由
signal
注册的处理程序在第一次信号时会被清除。为了匹配其他平台的行为,我们在每次处理程序被调用时重新注册处理程序,但会有一个时刻我们错过处理程序。这意味着当连续接收两个信号时,可能存在一个调用默认处理程序的信号,尽管您确实已注册了处理程序。