唯一进程标识符的标准或最佳实践(在类Unix操作系统上)

时间:2013-08-01 17:26:34

标签: unix uniqueidentifier unix-timestamp pid ps

在Unix系统上,PID仅在任何给定时间点都是唯一的。它在给定的时间间隔内不是唯一的,因为原始进程终止后PIDs used in the past can be re-used。为了存储自启动以来在系统上运行的所有进程的历史数据,我需要标识符自启动以来是唯一的。

是否有任何标准或最佳做法?我的预期解决方案中是否有任何错误或缺失?

预期解决方案

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

优点

  1. PID和过程开始时间都已明确定义,并且在所有类Unix系统上都有意义。
  2. 这两个值都是整数,相对容易处理。
  3. 可以通过开始时间和PID来明确地对进程进行排序。
  4. 除了唯一的流程识别外,这两个值都可以用于其他用途。
  5. 缺点

    1. 除了调用外部实用程序ps之外,似乎没有可移植的方法来获取进程启动时间。例如在shell中:date -d "$(ps -p $PID -o lstart=)" +%s。在Linux中,可以从/proc/$PID/stat计算流程开始时间,但此方法不适用于其他系统。
    2. 由于前一点的事实,便携式方法可能不必要地缓慢且资源密集。

1 个答案:

答案 0 :(得分:1)

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