| # Signal-hook |
| |
| [](https://travis-ci.org/vorner/signal-hook) |
| |
| Library for safe and correct Unix signal handling in Rust. |
| |
| Unix signals are inherently hard to handle correctly, for several reasons: |
| |
| * They are a global resource. If a library wants to set its own signal handlers, |
| it risks disturbing some other library. It is possible to chain the previous |
| signal handler, but then it is impossible to remove the old signal handlers |
| from the chains in any practical manner. |
| * They can be called from whatever thread, requiring synchronization. Also, as |
| they can interrupt a thread at any time, making most handling race-prone. |
| * According to the POSIX standard, the set of functions one may call inside a |
| signal handler is limited to very few of them. To highlight, mutexes (or other |
| locking mechanisms) and memory allocation and deallocation are *not* allowed. |
| |
| This library aims to solve some of the problems. It provides a global registry |
| of actions performed on arrival of signals. It is possible to register multiple |
| actions for the same signal and it is possible to remove the actions later on. |
| If there was a previous signal handler when the first action for a signal is |
| registered, it is chained (but the original one can't be removed). |
| |
| Besides the basic registration of an arbitrary action, several helper actions |
| are provided to cover the needs of the most common use cases. |
| |
| For further details, see the [documentation](https://docs.rs/signal-hook). |
| |
| ## License |
| |
| Licensed under either of |
| |
| * Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0) |
| * MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT) |
| |
| 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. |