forkguard 0.1.3

if guard.detected_fork() { ... }
Documentation

forkguard

Crates.io License

A lightweight crate for detecting process forks.

let mut guard = forkguard::new();

// Some time later...
if guard.detected_fork() {
    // Handle the fork (e.g., re-initialize state)
}

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 with atfork crate feature): Uses pthread_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 unless getpid() overhead is a concern.
  • noop::Guard (Non-Unix): Provides a no-op implementation that always returns false, 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:

[dependencies]
forkguard = { version = "0.1", features = ["atfork"] }

Alternatively, add the following to Cargo.toml:

[dependencies]
forkguard = "0.1"

And then enable the feature in your build command:

cargo build --features forkguard/atfork

License

Licensed under the Apache License, Version 2.0.