UNIX中的进程如何编号?


17

当我查看进程表(ps -a)中PID的编号时,找不到任何模式,因为PID不是后续编号,有时这些编号之间存在较大的“间隙”。是否因为可能有一些进程在短时间内运行并且保留了一些PID?是否有一定范围,之后进程编号将重置?

我使用的是Mac OS X,但我猜答案通常应该适用于UNIX。

Answers:


18

在这两个方面都可以。

许多过程是短暂的。他们得到一个PID,运行,完成,并且PID从过程表中消失。

进程有时仅存活一秒钟!

通常,程序启动时会运行许多命令,作为检查系统和初始化环境的一部分。

PID的最大数量取决于系统,有时可以配置。基本上,如果您知道将要有大量的进程,则可能需要增加数量,但是在新的操作系统上,我相信最大数量通常足以应付大多数工作负载。

PID是进程表中的条目,拥有的内存越多,进程表占用的内存就越大。

看看这个相关的问题:https : //serverfault.com/questions/279178/what-is-the-range-of-a-pid-on-linux-and-solaris

还要注意与此有关的是“每个用户的最大进程数”,这是一种措施,可防止恶意用户有意创建许多进程来占用整个进程表。


7

也可以配置一些现代内核以将随机PID分配给新进程,以提高安全性。至少Linux和FreeBSD可以使用sysctl设置来做到这一点,而OpenBSD总是这样做。在这些情况下,您可以少说一些编号方案。


您知道为此存在性能成本吗?
Bruce Ediger

@Bruce:由于天真随机化,第一个提出的补丁具有O(infty)的最坏情况性能。但是我认为它们有安全和可用的功能。我没有找到关于该主题的最新信息……我认为那不是用过的。:)
unperson325680

5
对我来说,随机PID听起来像安全性。
约翰

就是这样,主要是……
unperson325680

Appart出于个人计划,Linux过去仅通过grsecurity补丁提出它,Linux内核团队始终拒绝实现它(此处示例),甚至grsecurity团队最终在2006年末放弃了它
WhiteWinterWolf
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.