在Unix系统上,PID仅在任何给定时间点都是唯一的。它在给定的时间间隔内不是唯一的,因为原始进程终止后PIDs used in the past can be re-used。为了存储自启动以来在系统上运行的所有进程的历史数据,我需要标识符自启动以来是唯一的。
是否有任何标准或最佳做法?我的预期解决方案中是否有任何错误或缺失?
将PID与流程开始时间(作为标准Unix time)一起用作唯一流程标识符似乎是合乎逻辑的。这种标识符在重新启动之间甚至是唯一的。
优点
缺点
ps
之外,似乎没有可移植的方法来获取进程启动时间。例如在shell中:date -d "$(ps -p $PID -o lstart=)" +%s
。在Linux中,可以从/proc/$PID/stat
计算流程开始时间,但此方法不适用于其他系统。答案 0 :(得分:1)
ntp服务总是调整系统时间,这会影响从" ps -p $ pid -o lstart"中读取的开始时间。因此,您可以在调整系统时间后获得不同的开始时间。