#[cfg(target_os = "linux")]
const LINUX_DEFAULT_PID_MAX: u32 = 4_194_304;
#[cfg(target_os = "linux")]
pub fn read_pid_max() -> u32 {
use std::io::Read;
let mut buf = [0u8; 16];
let n = match std::fs::File::open("/proc/sys/kernel/pid_max").and_then(|mut f| f.read(&mut buf))
{
Ok(n) => n,
Err(_) => return LINUX_DEFAULT_PID_MAX,
};
let slice = &buf[..n];
let trimmed = match std::str::from_utf8(slice) {
Ok(s) => s.trim(),
Err(_) => return LINUX_DEFAULT_PID_MAX,
};
match trimmed.parse::<u64>() {
Ok(v) if v > 0 && v <= u32::MAX as u64 => v as u32,
_ => LINUX_DEFAULT_PID_MAX,
}
}
#[cfg(not(target_os = "linux"))]
pub fn read_pid_max() -> u32 {
u32::MAX
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn read_pid_max_returns_positive_value() {
let v = read_pid_max();
assert!(
v >= 2,
"pid_max must be at least 2 (covers pid 0/1 reserved): {v}"
);
}
#[cfg(target_os = "linux")]
#[test]
fn read_pid_max_does_not_exceed_modern_default_on_typical_hosts() {
let v = read_pid_max();
assert!(
v <= LINUX_DEFAULT_PID_MAX,
"pid_max must not exceed the modern kernel default on typical hosts: \
got {v}, expected ≤ {LINUX_DEFAULT_PID_MAX}"
);
}
#[cfg(not(target_os = "linux"))]
#[test]
fn non_linux_returns_permissive_u32_max() {
assert_eq!(read_pid_max(), u32::MAX);
}
}