2

在 Unix 系统上,PID 仅在任何给定时间点都是唯一的。它在给定的时间间隔内不是唯一的,因为过去使用的 PID 可以在原始进程终止后重新使用。为了存储自启动以来在系统上运行的所有进程的历史数据,我需要标识符自启动以来是唯一的。

是否有任何标准或最佳实践?我在下面的预期解决方案中是否有任何错误或遗漏?

预期解决方案

将 PID 与进程开始时间(作为标准Unix 时间)一起用作唯一进程标识符似乎是合乎逻辑的。这样的标识符在重新启动之间甚至是唯一的。

优点

  1. PID 和进程启动时间都定义得足够清楚,并且在所有类 Unix 系统上都有意义。
  2. 这两个值都是整数并且相对容易处理。
  3. 进程可以按开始时间后跟 PID 明确排序。
  4. 除了流程的唯一标识之外,这两个值都可以用于其他用途。

缺点

  1. 除了调用 external utility 之外,似乎没有可移植的方法来获取进程开始时间ps。例如在外壳中:date -d "$(ps -p $PID -o lstart=)" +%s. 在 Linux 中,可以计算进程开始时间,/proc/$PID/stat但这种方法在其他系统上不起作用。
  2. 由于前一点中的事实,可移植方法可能会不必要地缓慢且资源密集。
4

1 回答 1

1

ntp 服务总是调整系统时间,这会影响从“ps -p $pid -o lstart”读取的开始时间。因此,您可以在调整系统时间后获得不同的开始时间。

于 2013-10-17T05:33:50.200 回答