Intereting Posts
HTTPS не работает на example.com, только для www.example.com Как изменить стандартный «полноэкранный» монитор? Есть ли способ ограничить диапазон шаблона диапазона в awk? Как определить оставшееся пространство на изолированном разделе из командной строки Подмодуль Git показывает новые коммиты, статус подмодуля ничего не говорит для фиксации Группировка строк в гетерогенные подмножества Как настроить файловую систему + LVM для эффективного использования SSD? Назначение номера виртуального ядра конкретному реальному ядру Поиск правильного драйвера дисплея для установки арки в виртуальной коробке на Lenovo edge13 '' Легкий способ создания бессмысленного, дешевого, долговременного процесса? Получение ошибки со сном и аргументом в sh-скрипте У CentOS нет DefaultDepth как вводить нажатия клавиш в программе, например Safari, из сценария bash? Каково значение точки в командах bash и чем она отличается от звездочки? Какова цель UUID для сетевых адаптеров?

Когда начался процесс

Чтобы узнать, когда начался процесс, я сначала предполагал проверить время, когда /proc/<pid>/cmdline было написано / изменено в последний раз.

ps также показывает поле START . Я думал, что оба эти источника будут одинаковыми. Иногда они не то же самое. Как это могло быть?

По крайней мере на Linux вы также можете:

 ps -o lstart= -p the-pid 

чтобы иметь более полезное время начала.

Обратите внимание, однако, что настало время, когда процесс был запущен, а не обязательно время, когда была вызвана команда , выполняемая в данный момент. Процессы могут (и обычно) запускать более одной команды за всю свою жизнь. И команды иногда порождают другие процессы.

Mtimes файлов в /proc на Linux (по крайней мере), как правило, это дата, когда эти файлы были созданы, что в первый раз попытается получить к ним доступ или перечислить содержимое каталога.

Например:

 $ sh -c 'date +%T.%N; sleep 3; echo /proc/"$$"/xx*; sleep 3; stat -c %y "/proc/$$/cmdline"' 13:39:14.791809617 /proc/31407/xx* 2013-01-22 13:39:17.790278538 +0000 

Расширение /proc/$$/xx* заставило оболочку прочитать содержимое /proc/$$ которое вызвало создание экземпляра файла cmdline .

См. Также: Временная метка сокета в / proc // fd

proc – это виртуальная файловая система, поэтому я не буду полагаться на информацию о статусе файла.

Время начала процесса находится в столбце / proc / PID / stat 22 . Он предоставляется в jiffies после загрузки системы. Чтобы преобразовать его в несколько секунд, вы должны разделить его на sysconf(_SC_CLK_TCK) который равен 100 для большинства систем (но не для всех!).

Чтобы получить время загрузки системы, вы определяете текущее время безотказной работы в секундах, которое является первым значением / proc / uptime .

Имея эти два числа, вы вычитаете первый из второго, и вы получаете количество секунд, прошедших с момента запуска программы.

Пример (для pidgin ):

 PID=$(pidof pidgin) STARTTIME=$(awk '{print int($22 / 100)}' /proc/$PID/stat) UPTIME=$(awk '{print int($1)}' /proc/uptime) NOW=$(date +%s) DIFF=$((NOW - (UPTIME - STARTTIME))) date -d @$DIFF 

Примечание. Этот простой пример не работает, если pidof возвращает multid PID.