在 Unix-ish 环境中,PID 环绕是否保证改变进程开始时间?

In Unix-ish environments, is PID wraparound guaranteed to change process start time?

上下文:

我在学术上对 tracking/identifying UNIX 进程很感兴趣,这种方式可以证明 PID wraparound。要通过 PID 开始跟踪进程,我需要能够在系统上最终识别它。

因此,我需要一个函数,get_identity,它接受一个 PID,并且只有 returns 一旦它确定了该 PID 的系统范围的唯一标识。该函数应适用于所有或大多数 POSIX 兼容系统。

我所知道的过程 table 中唯一的 immutable 值是 PID 和开始时间。但是,以下情况会带来问题:

  1. 用户调用get_identity(pid)
  2. get_identity 读取 in seconds-since-the-epoch of pid,如果存在,returns希望唯一的元组 [pid, starttime](这是优秀的 psutil Python 库认为 "unique enough",所以它应该非常健壮)。
  3. 在该调用的一秒内,系统发生 PID 环绕,pid 被回收。
  4. [pid, starttime] 元组现在引用的进程与调用 get_identity 时出现的进程不同。

虽然极 不可能 发生 PID 回绕并在其被识别后的一秒内重新使用选定的 PID,但这并非 不可能。 . .对吧?

问题:

我尝试过的:

由于 PID 的分配和 proc table 管理通常没有任何标准定义,所以实际上不可能以 portable 方式做你想做的事。

您将需要按照您所说的去做并开发多个特定于平台的实现来收集有关进程的足够信息以确定每个进程的唯一标识。

另一方面,如果您不需要在进程启动时实时获取此信息,并且当它们仍在 运行ning 时,您可以在大多数 unix-y 系统上简单地打开进程会计,并保证系统 运行 每个流程的唯一和完整记录。处理会计文件也没有标准化,但会有头文件定义其记录格式,并且每种系统上应该有工具可以以各种方式处理和汇总会计文件。

保证 PID 环绕。你永远不会得到两个具有相同 pid 的进程。