You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于psutil.Process.children()处理PID复用的代码逻辑疑问

解析psutil中Process.children()的PID复用判断逻辑

先看你提到的这段代码:

# if child happens to be older than its parent
# (self) it means child's PID has been reused
intime = self.create_time() <= child.create_time()
if intime:
    ret.append(child)
    stack.append(child_pid)

这段代码的核心目的是排除被系统复用的PID,避免把无关进程误判为当前进程的子进程,逻辑拆解如下:

  • 正常情况下,父进程(self)的创建时间必然早于它的子进程——毕竟得先启动父进程,才能fork出子进程。所以真正的子进程,它的create_time()肯定大于等于父进程的创建时间,此时intime为True,会被加入子进程列表。
  • 如果某个进程的PID被系统标记为当前进程的"子进程",但它的create_time()比父进程还早(也就是注释里说的"child happens to be older than its parent"),说明这个PID是被复用的:原来的子进程已经终止,系统把这个PID分配给了一个更早启动的进程,它显然不是当前进程的真正子进程,所以会被这段代码过滤掉(intime为False,不会加入列表)。

你之前的疑惑是搞反了判断逻辑:代码里的intime是在筛选"符合正常父子进程时间顺序"的进程,而注释里的异常情况(PID复用)是被排除的对象。

内容的提问来源于stack exchange,提问作者Max

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 12:43:09