forkguard
A lightweight crate for detecting process forks.
let mut guard = new;
// Some time later...
if guard.detected_fork
This crate provides Guard types that can detect if the current process has
been forked since the last check. This is useful for resetting state (like
random number generators or connection pools) that should not be shared between
a parent and its forked child.
Depending on the platform and enabled features, new() returns one of three
specialized Guard flavors:
atfork::Guard(Unix withatforkcrate feature): Usespthread_atfork()to update the global state on fork. This is the most efficient detection mechanism for supported Unix-like systems, though the usual caveats of fork handlers apply.pid::Guard(Unix default): Tracks the process ID and detects changes. This is a simple and sufficiently efficient option for Unix-like platforms unlessgetpid()overhead is a concern.noop::Guard(Non-Unix): Provides a no-op implementation that always returnsfalse, used on platforms where fork detection is not required.
The top-level forkguard::Guard resolves to the active flavor.
Crate features
atfork(optional): See the above description.
This crate lets downstream users opt-in to the atfork feature even when the
intermediate dependencies do not. To do this, add the following to your
Cargo.toml no matter if your crate uses forkguard directly:
[]
= { = "0.1", = ["atfork"] }
Alternatively, add the following to Cargo.toml:
[]
= "0.1"
And then enable the feature in your build command:
License
Licensed under the Apache License, Version 2.0.