В системах Unix PID уникален только в любой момент времени. Он не уникален в заданном интервале времени, потому что идентификаторы PID, использовавшиеся в прошлом, можно использовать повторно после завершения исходного процесса. Для хранения данных истории всех процессов, которые были запущены в системе с момента загрузки, мне нужно, чтобы идентификаторы были уникальными с момента загрузки.
Есть ли какой-либо стандарт или лучшая практика для этого? Есть ли что-то неправильное или отсутствующее в моем предполагаемом решении ниже?
Предполагаемое решение
Кажется логичным использовать PID вместе со временем запуска процесса (как стандартное время Unix) в качестве уникальный идентификатор процесса. Такой идентификатор будет даже уникальным между перезагрузками.
Преимущества
- И PID, и время запуска процесса достаточно четко определены и имеют смысл во всех Unix-подобных системах.
- Оба значения являются целыми числами и относительно просты в обработке.
- Процессы можно однозначно сортировать по времени запуска, за которым следует PID.
- Оба значения могут использоваться не только для уникальной идентификации процессов.
Недостатки
- Кажется, нет переносимого способа получить время запуска процесса, кроме вызова внешней утилиты
ps
. Например в оболочке:date -d "$(ps -p $PID -o lstart=)" +%s
. В Linux можно вычислить время запуска процесса с/proc/$PID/stat
, но этот метод не работает в других системах. - Из-за фактов в предыдущем пункте переносимый метод может быть излишне медленным и ресурсоемким.