pid-set 0.1.3

A processes identifier set to perform efficient wait operations using epoll
Documentation
  • Coverage
  • 53.85%
    7 out of 13 items documented1 out of 7 items with examples
  • Size
  • Source code size: 16.1 kB This is the summed size of all the files inside the crates.io package for this release.
  • Documentation size: 242.5 kB This is the summed size of all files generated by rustdoc for all configured targets
  • Ø build duration
  • this release: 13s Average build duration of successful builds.
  • all releases: 13s Average build duration of successful builds in releases after 2024-10-23.
  • Links
  • Homepage
  • crates.io
  • Dependencies
  • Versions
  • Owners
  • rogercoll

Continuos Integration dependency status

PID Set Library

The pid_set library provides tools for managing and monitoring process identifiers (PIDs) using epoll on Linux platforms. It utilizes epoll and pidfd to asynchronously notify when a process exits, offering a robust way to handle PID-related events.

Motivation

The primary motivation behind developing the PidSet crate stems from a limitation in Rust's standard library, particularly with the std::process::Child struct, which is used to represent child processes. The standard Child struct provides a wait and a try_wait method that blocks the entire system thread until the child process exits. This blocking behavior is not ideal for efficiently managing multiple child processes within a single thread.

The PidSet crate addresses this by leveraging Linux's epoll and pidfd functionalities, enabling non-blocking and asynchronous monitoring of multiple processes. By using epoll, PidSet allows a program to "watch" multiple child processes and receive notifications about changes in their state (like termination), without the need of blocking a thread for each child process. This is particularly useful in applications that need to manage several child processes concurrently without dedicating a separate thread to each process just to wait for its completion.

Man pages

Features

  • Manage Multiple PIDs: Track and manage multiple process identifiers easily.
  • Asynchronous Monitoring: Use epoll for efficient event notification.
  • Error Handling: Includes comprehensive error handling to manage system call failures gracefully.

WIP features

  • Insert/delete function
  • Add duration parameter to wait functions (breaking change)

Prerequisites

This library is intended for use on Linux systems with support for epoll and pidfd_open. Ensure your system meets these requirements before using the library.

Installation

Add pid_set to your Cargo.toml dependencies:

[dependencies]
pid_set = "0.1.0"

Usage

use pid_set::{PidSet, PidSetError};

fn main() -> Result<(), PidSetError> {
    // Example PIDs to monitor
    let pids = vec![1234, 5678];
    let mut pid_set = PidSet::new(pids);

    // Wait for any one PID to exit
    pid_set.wait_any()?;

    // Clean up
    pid_set.close()?;
    Ok(())
}

API

  • PidSet::new(pids): Create a new PidSet with the specified PIDs.
  • PidSet::wait_any(): Wait for any one PID to exit.
  • PidSet::wait_all(): Wait for all PIDs to exit.
  • PidSet::close(): Close the epoll file descriptor and clean up resources.