Чтобы узнать, когда был запущен процесс, моей первой догадкой было проверить, когда /proc/<pid>/cmdline
был написан / изменен последний раз.
ps
также показывает START
поле. Я думал, что оба этих источника будут одинаковыми. Иногда они не совпадают. Как это может быть?
Ответы:
По крайней мере, в Linux вы также можете сделать:
иметь более полезное время начала.
Однако обратите внимание, что это время, когда процесс был запущен, а не обязательно время, когда команда, которую он выполняет в данный момент, была вызвана. Процессы могут (и обычно делают) выполнять более одной команды за время жизни. И команды иногда порождают другие процессы.
Количество файлов в
/proc
Linux (по крайней мере) обычно является датой, когда эти файлы были созданы, что будет первым случаем, когда кто-то попытается получить к ним доступ или отобразить содержимое каталога.Например:
В результате расширения
/proc/$$/xx*
оболочка прочитала содержимое, из-за/proc/$$
которого был созданcmdline
экземпляр файла.Смотрите также: Временная метка сокета в / proc // fd
источник
proc - это виртуальная файловая система, поэтому я не буду полагаться на информацию о состоянии файлов.
Время начала процесса находится в / proc / PID / stat столбце 22 . Это дается в jiffies после загрузки системы. Чтобы преобразовать его в секунды, вы должны разделить его на
sysconf(_SC_CLK_TCK)
100 для большинства систем (но не для всех!).Чтобы получить время загрузки системы, вы определяете текущее время работы в секундах, которое является первым значением / proc / uptime .
Имея эти два числа, вы вычитаете первое из второго и получаете количество секунд, прошедших с момента запуска программы.
Пример (для пиджина ):
Примечание: этот простой пример не работает, если
pidof
возвращает несколько PID.источник