![]() |
1
48
内核在范围内分配pid(保留的pids,pid_max_默认值)。它在每个命名空间中按顺序执行(不同命名空间中的任务可以具有相同的ID)。如果范围已用完,PID分配将环绕。 一些相关代码: 内部分配PID(…)
ApLoopPIDMAP()
请注意,内核上下文中的pid不仅仅是
PIDS在用户空间中没有出现顺序的原因是,内核调度可能会在进程之间分叉进程。
|
![]() |
2
11
我宁愿假设你看到的行为 源于另一个来源 : 好的Web服务器通常有几个流程实例来平衡请求的负载。这些进程在池中进行管理,并在每次请求进入时分配给特定的请求。为了优化性能,Apache可能会为来自同一个客户机的一系列连续请求分配相同的进程。在一定数量的请求之后,该进程将终止并创建一个新的请求。 我不相信Linux会为多个进程分配相同的PID。 正如您所说,新的PID将接近最后一个PID,我猜Linux只是为每个进程分配最后一个PID+1。但是有一些进程一直在后台被应用程序和系统程序弹出并终止,因此您无法预测下一步启动的Apache进程的确切数量。 除此之外,你应该 不 使用关于pid分配的任何假设作为实现某些内容的基础。(另见Sanmai的评论。) |
![]() |
3
8
PID are sequential 在大多数系统上。您可以通过自己在空闲机器上启动几个进程来看到这一点。 例如,使用向上箭头历史记录调用来重复运行一个命令,该命令将打印自己的PID:
不要依赖于这一点:出于安全原因,有些人运行那些花费额外CPU时间随机选择新PID的内核。 |
![]() |
4
4
PID可以随机分配。有 a number of ways 为了实现这一点。 |
![]() |
MaPo · Linux,设置锁定ICMP_过滤器选项 4 月前 |
![]() |
user2138149 · 双栈网络服务器无法按预期处理ipv4请求 5 月前 |
![]() |
Marco · PyCharm Linux系统文件上os.stat异常 6 月前 |