首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么进程不填充空进程ID?

为什么进程不填充空进程ID?
EN

Unix & Linux用户
提问于 2016-04-10 16:01:20
回答 1查看 249关注 0票数 2

每个人都知道PID数字1是systemd (或类似的东西)。之后的每一个过程都需要另一个PID,计数。

但是,当有50个进程正在运行(直到PID 50),而带有PID 2的进程终止并且一个新进程启动时,它将不是PID 2,而是PID 51。为什么会这样呢?

我注意到,例如,对于文件描述符,它不是这样的,而是,当我关闭文件描述符4并打开一个新的文件描述符时,它将有数字4。

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2016-04-11 00:01:56

大多数Unix变体按顺序分配进程ID: 1、2、3、4、.当达到最大可能的PID值时,它们将再次从1开始,跳过已经存在的PID。

这不是一项义务。例如,OpenBSD随机分配PID,而不是顺序分配;这也是FreeBSD上的一个选项。目标是通过好处令人怀疑改进安全性。

这种行为有一个(可疑的)好处:它使得进程ID在进程死后立即被重用是非常罕见的。有许多程序监视进程,并假设进程死后,如果一个新进程使用PID,那么PID将不会被使用- which中断。这些程序确实有一个借口:除了来自父进程的API之外,没有好的API来监视进程。但是这样的程序非常广泛,以至于OpenBSD避免在进程死后一段时间内重用PID (如果我没记错的话)。

这种行为的主要原因是它是如何在传统的Unix系统上进行的,并且没有很强的改变的理由。对于文件描述符,Unix历史上使用的是第一个免费fd编号,这种行为已经成为官方标准,所以所有Unix/POSIX系统都必须这样做。

票数 3
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/275510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档