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