【发布时间】:2013-08-01 17:26:34
【问题描述】:
在 Unix 系统上,PID 仅在任何给定时间点都是唯一的。它在给定的时间间隔内不是唯一的,因为PIDs used in the past can be re-used 在原始进程终止后。为了存储自启动以来系统上运行的所有进程的历史数据,我需要标识符自启动以来是唯一的。
是否有任何标准或最佳实践?我在下面的预期解决方案中是否有任何错误或遗漏?
预期解决方案
将 PID 与进程开始时间(作为标准 Unix time)一起用作唯一进程标识符似乎是合乎逻辑的。这样的标识符在重新启动之间甚至是唯一的。
优势
- PID 和进程启动时间都定义得足够清楚,并且在所有类 Unix 系统上都有意义。
- 这两个值都是整数,比较容易处理。
- 进程可以按开始时间后跟 PID 明确排序。
- 除了唯一标识进程之外,这两个值还可以用于其他用途。
缺点
- 除了调用外部实用程序
ps之外,似乎没有可移植的方法来获取进程开始时间。例如在 shell 中:date -d "$(ps -p $PID -o lstart=)" +%s。在 Linux 中,可以从/proc/$PID/stat计算进程开始时间,但此方法不适用于其他系统。 - 由于前一点中的事实,可移植方法可能会非常缓慢且占用大量资源。
【问题讨论】:
标签: unix uniqueidentifier unix-timestamp pid ps