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

有帮助吗?

解决方案

这由操作系统决定。

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

其他提示

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

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

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

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

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

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

在AIX上,你经常会看到更大的(例如7位数)PID并且它们不一定是半顺序分配的(虽然我在测试时似乎以2的增量循环;机器上还有另一个用户,所以它可能意义不大。)

在AIX 5.3机器上进行全新登录:

$ ps
     PID    TTY  TIME CMD
 1060910 pts/27  0:00 -ksh
 1155224 pts/27  0:00 ps
$

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

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

从您的角度来看,它们将是随机的。系统管理这些数字并在创建进程时分配它们。快速查看我系统上当前的PID,可以看出它们都可以被4 ...

整除

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top