Linux中的PID号是什么意思?

Linux中的PID号是什么意思?

我想知道Linux中进程标识符的含义是什么,是进程的顺序吗?

它是标识流程性质的代码,还是只是随机生成的用于唯一标识流程的数字?

具有相似 PID 的不同进程是否以某种方式相关?

答案1

当 Linux 内核启动一个新进程时,它会为其分配一个从 1 开始的唯一整数。您可能会注意到这/sbin/init通常是PID 1因为它是第一个启动的进程。

具有相似 PID 的不同进程是否以某种方式相关?

不会。如果它们的 PID 很接近,它们可能大约在同一时间启动。在 32 位 Linux 上,PID 限制为 32768,因此一旦内核达到此数字,它将再次启动。在 64 位 Linux 上,PID 限制为 2^22 并且很少溢出(除非您有很长的正常运行时间并启动和停止数千个进程)。

答案2

PID 是“进程标识符”的缩写。这正是它的本质,一种“唯一”识别系统上进程的方法。请注意,我在这里用引号括住了“唯一”。这是因为 PID 仅在其分配到的进程的生命周期内是唯一的。

至于如何选择 PID,则因系统而异。最初的方法是简单地分配下一个尚未使用的数字,直到达到某个最大值,一旦达到该最大值,您就开始重用以前使用过但当前未使用的数字,再次从最低的数字开始。

Linux 采用了这种原始方法,因为它简单且快速。缺点是一些写得不好的软件可能会以不应该的方式依赖 PID(例如使用它们来播种内部随机数生成器或创建临时文件名),如果您使用此类软件(但幸运的是此类软件越来越少)。

有些系统(例如 OpenBSD)会从当前未使用的 1 到最大值之间的值中随机选择 PID。这消除了本地安全问题,但作为交换,它会减慢新进程的创建速度,使您向互联网上的随机用户开放潜在的令人讨厌的事情(例如中概述的漏洞)这个安全堆栈交换问题),并且可能会破坏期望 PID 不能快速重用的软件。

其他的,比如 FreeBSD,允许您选择任一方法,或者使用中间立场。这允许您选择要处理的特定安全问题集(提示,这可能是本地问题,而不是远程问题),甚至选择中间立场(这通常是正确的选择)。

相关内容