我有一个有点愚蠢的问题,如果我有一系列创build的进程…这些不一定是某种inheritance,进程的PID必须是数字连续或随机pid?
这是由操作系统决定的。
一般来说,它们通常由操作系统依次分配。 但是,这种行为不是基于决定的,因为大多数操作系统规范都声明进程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依赖于操作系统调度器,你不关心这个东西。