【问题标题】:Standard or best practise for unique process identifier (on Unix-like OS)唯一进程标识符的标准或最佳实践(在类 Unix 操作系统上)
【发布时间】:2013-08-01 17:26:34
【问题描述】:

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

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

预期解决方案

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

优势

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

缺点

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

【问题讨论】:

    标签: unix uniqueidentifier unix-timestamp pid ps


    【解决方案1】:

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

    【讨论】:

    • 这是一个很好的观点。感谢您指出这个陷阱。
    猜你喜欢
    • 2018-05-17
    • 2019-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-26
    • 1970-01-01
    • 2011-12-08
    相关资源
    最近更新 更多