0

我有一个有点愚蠢的问题,如果我创建了一系列进程......这些不一定是某种继承,进程的 pid 必须是数字连续或随机 pid?

4

7 回答 7

7

这是由操作系统决定的。

通常,它们通常由操作系统按顺序分配。但是,这种行为不是决策的基础,因为大多数操作系统规范都声明进程 ID 分配不是确定性的(即:它可能是随机的,并且可能在未来的版本中发生变化等)。

于 2009-05-05T00:47:25.673 回答
4

在 Linux 上,pid 通常在系统范围内按顺序分配,但它们会定期回绕,并且可能存在由其他不相关进程引起的“间隙”。在极端情况下,您可能有足够宽的“间隙”来导致这种环绕。所以不要假设任何特定的顺序 - 而是明确地跟踪您的父或子进程的 PID。

于 2009-05-05T00:48:09.980 回答
2

以下是测试系统功能的方法:

for i in $(seq 20); do ps; done | grep ps

“ps”命令的 PID 是连续的进程,或者与任何其他调用者合理预期能够产生的接近连续的进程一样。

我在 Windows 上的 cygwin 终端随机分配它们,我的网络主机按顺序分配它们(偶尔会有间隙,可能是其他用户或服务器运行的进程)。

有些人认为顺序 PID 分配可能是一个轻微的安全问题,因为它可能会在多用户系统的用户之间泄漏信息。

于 2009-05-05T01:56:20.987 回答
1

在 AIX 上,您经常会看到更大(例如 7 位)的 PI​​D,它们不一定是半顺序分配的(尽管我在测试时似乎以 2 为增量循环;机器上有另一个用户,所以它可能意义不大)。

在 AIX 5.3 机器上重新登录:

$ ps
     PID    TTY  TIME CMD
 1060910 pts/27  0:00 -ksh
 1155224 pts/27  0:00 ps
$
于 2009-05-05T01:57:05.303 回答
0

取决于您的平台,但您不应该依赖于您的 pid 的任何特定顺序。

在 Windows 上,pid 通常分配的数量越来越多,但是当进程退出时,pid 可以被回收,您会看到新进程的 pid 低于旧进程的情况。此外,pid 来自与 tid 相同的命名空间,因此当您启动新进程时,您不会看到 pid 增加 4。

于 2009-05-05T00:46:34.303 回答
0

从您的角度来看,它们将是随机的。系统管理这些编号并在创建流程时分配它们。快速浏览一下我系统上当前的 PID,发现它们都可以被 4 整除……

于 2009-05-05T00:47:16.347 回答
0

如果你正在创建那些你会知道 pid 的孩子,pid 取决于操作系统调度程序,你不关心这些东西。

于 2009-05-05T00:53:13.040 回答