我有一个有点愚蠢的问题,如果我有一系列创建的进程......这些进程不一定是某种继承,进程的pid必须是数字连续或随机的pid?
答案 0 :(得分:7)
这由操作系统决定。
通常,它们通常由OS按顺序分配。但是,这种行为不是基于决策的,因为大多数操作系统规范都声明进程ID分配不是确定性的(即:它可能是随机的,并且可能在将来的版本中发生变化等)。
答案 1 :(得分:4)
在Linux上,pids通常在系统范围内按顺序分配,但是它们会定期环绕,并且可能存在由其他不相关进程引起的“间隙”。在极端情况下,您可能会有一个“间隙”宽度足以导致这种环绕。因此,不要假设任何特定的顺序 - 而是明确地跟踪您的父进程或子进程'PID。
答案 2 :(得分:2)
以下是测试系统功能的方法:
for i in $(seq 20); do ps; done | grep ps
“ps”命令的PID是连续的进程,或者接近连续,因为任何其他调用者都可以合理地期望能够产生。
我在Windows上的cygwin终端随机分配它们,我的网站主机按顺序分配它们(偶尔会有间隙,大概是其他用户或服务器运行的进程)。
有些人认为顺序PID分配是一个轻微的安全问题,因为它可能会泄漏多用户系统用户之间的信息。
答案 3 :(得分:1)
在AIX上,你经常会看到更大的(例如7位数)PID并且它们不一定是半顺序分配的(虽然我在测试时似乎以2的增量循环;机器上还有另一个用户,所以它可能意义不大。)
在AIX 5.3机器上进行全新登录:
$ ps
PID TTY TIME CMD
1060910 pts/27 0:00 -ksh
1155224 pts/27 0:00 ps
$
答案 4 :(得分:0)
取决于您的平台,但您不应该依赖于您的pid的任何特定订单。
在Windows上,pid通常以递增的数量分配,但随着进程退出,pid可以被回收,您将看到新进程的pid低于旧进程的情况。此外,pid来自与tid相同的命名空间,因此当你启动新进程时,你不会看到pid增加4。
答案 5 :(得分:0)
从您的角度来看,它们将是随机的。系统管理这些数字并在创建进程时分配它们。快速查看我系统上当前的PID,可以看出它们都可以被4 ...
整除答案 6 :(得分:0)
如果你正在创建那些孩子你会知道pid,pid取决于OS调度程序,你不关心这些东西。