如何确定 pid_max 包裹了多少次?

Aqu*_*wer 4 linux process monitoring pid

甚至有可能知道吗?可能需要进行某种测试才能找到该信息?

我的系统,就在我登录后,似乎已经包装了 max_pid,所以一个仍然活着的 pid 获得了与旧进程相同的 pid(这是我的一个脚本搞砸了......)!我试图了解正在发生的事情,如果有一些解决方法......

我的/proc/sys/kernel/pid_max是 32768

Ram*_*esh 6

无法判断pid_max包裹发生了多少次。不遇到pid_max包装的一种解决方法是增加pid_max内部的值,

cat /proc/sys/kernel/pid_max
Run Code Online (Sandbox Code Playgroud)

上面的命令会让您知道系统中的最大可用进程数。您可以将 max_pid 值增加为,

echo 4194303 > /proc/sys/kernel/pid_max
Run Code Online (Sandbox Code Playgroud)

甚至,

sysctl -w kernel.pid_max=4194303
Run Code Online (Sandbox Code Playgroud)

但是,您需要调查当前是否有一些进程正在使用内存。

您可以运行ps -Aps -e查看当前正在使用系统内存的进程。

为什么无法确定包裹?

这个答案,

大多数系统只是保留最后生成的 PID 的计数,加一个(以最大数字包装,例如 65535 或更小一点 - 通常包装发生在 65000 甚至 60000),并检查该数字是否当前未使用(如果 PID 仍在使用中,则重复 - 所以 PID 1,即内核,仍然存在并且不会“重新发布”)。

其他具有安全意识的系统会随机生成一个数字并检查它是否未被使用。

在任何给定时间,都可以保证所有 PID 编号都是唯一的。

因此,即使pid_max达到了,您仍然可能有一些当前未使用的 pid,因此系统仍然可以使用这些 pid。据我所知,只有当您遇到此评论所说的错误时,才能知道自己没有 pids ,

如果您有进程 > pid_max,您会收到类似“没有更多进程...