在 Unix 系统上,PID 仅在任何给定时间点都是唯一的。它在给定的时间间隔内不是唯一的,因为过去使用的 PID 可以在原始进程终止后重新使用。为了存储自启动以来在系统上运行的所有进程的历史数据,我需要标识符自启动以来是唯一的。
是否有任何标准或最佳实践?我在下面的预期解决方案中是否有任何错误或遗漏?
预期解决方案
将 PID 与进程开始时间(作为标准Unix 时间)一起用作唯一进程标识符似乎是合乎逻辑的。这样的标识符在重新启动之间甚至是唯一的。
优点
- PID 和进程启动时间都定义得足够清楚,并且在所有类 Unix 系统上都有意义。
- 这两个值都是整数并且相对容易处理。
- 进程可以按开始时间后跟 PID 明确排序。
- 除了流程的唯一标识之外,这两个值都可以用于其他用途。
缺点
- 除了调用 external utility 之外,似乎没有可移植的方法来获取进程开始时间
ps
。例如在外壳中:date -d "$(ps -p $PID -o lstart=)" +%s
. 在 Linux 中,可以计算进程开始时间,/proc/$PID/stat
但这种方法在其他系统上不起作用。 - 由于前一点中的事实,可移植方法可能会不必要地缓慢且资源密集。