Как узнать время работы процесса в Linux

Как узнать аптайм данного процесса в Linux.

ps aux | grep gedit | grep -v grep

дает мне много информации, которая включает в себя время, когда процесс был запущен.
Я специально ищу switch, который возвращает время работы процесса в миллисекундах.

спасибо

28
задан Mahadevan Sreenivasan
19.04.2023 11:04 Количество просмотров материала 3261
Распечатать страницу

5 ответов

как "uptime" имеет несколько значений, вот полезная команда.

ps -eo pid,comm,lstart,etime,time,args

эта команда выводит список всех процессов с несколькими различными столбцами, связанными со временем. Он имеет следующие столбцы:

PID COMMAND                          STARTED     ELAPSED     TIME COMMAND

PID = идентификатор процесса

первый COMMAND = только имя команды без параметров и без аргументов

STARTED = абсолютное время начала процесса

ELAPSED = время, прошедшее с момента запуска процесса (времени), формат [[dd-]hh:]mm: ss TIME = накопительное время процессора," [dd-]hh:mm:ss " формат

second COMMAND = снова команда, на этот раз со всеми предоставленными параметрами и аргументами

99
отвечен Abdull 2023-04-20 18:52

если у вас есть ограниченная версия ps таких как находится в busybox, вы можете получить время запуска процесса, глядя на метку /proc/<PID>. Например, если pid, который вы хотите посмотреть, 55...

# ls -al /proc | grep 55
dr-xr-xr-x    7 root     root             0 May 21 05:53 55

... а затем сравнить его с текущей датой...

# date
Thu May 22 03:00:47 EDT 2014
7
отвечен goertzenator 2023-04-20 21:09

Я думаю, что вы можете просто запустить:

$ stat /proc/1234

1234-идентификатор процесса.

пример с двумя процессами, запущенными в один и тот же час минуты секунды, но не те же миллисекунды:

$ stat /proc/9355
...
Access: 2017-11-13 17:46:39.778791165 +0100
Modify: 2017-11-13 17:46:39.778791165 +0100
Change: 2017-11-13 17:46:39.778791165 +0100
$ stat /proc/9209
...
Access: 2017-11-13 17:46:39.621790420 +0100
Modify: 2017-11-13 17:46:39.621790420 +0100
Change: 2017-11-13 17:46:39.621790420 +0100
4
отвечен yohann.martineau 2023-04-20 23:26

такая простая вещь не правильно ответил после 5 лет?

Я не думаю, что вы можете точно сделать миллисекунд. напр. если вы видите Man procfs и видите /proc / $$ / stat, который имеет поле 22 как startime, которое находится в "Clock ticks", у вас будет что-то более точное, но тики часов не собираются с совершенно постоянной скоростью (относительно "настенного времени") и будут выключены... сон и некоторые вещи (ntpd, я думаю) компенсируют это. Например, на машине, работающей под управлением ntpd, с 8 днями uptime и никогда не спал, dmesg-T имеет ту же проблему (я думаю...), и вы можете увидеть его здесь:

# date; echo h > /proc/sysrq-trigger; dmesg -T | tail -n1 ; date
Fri Mar  3 10:26:17 CET 2017
[Fri Mar  3 10:26:16 2017] sysrq: SysRq : HELP : loglevel(0-9) reboot(b) crash(c) terminate-all-tasks(e) memory-full-oom-kill(f) kill-all-tasks(i) thaw-filesystems(j) sak(k) show-backtrace-all-active-cpus(l) show-memory-usage(m) nice-all-RT-tasks(n) poweroff(o) show-registers(p) show-all-timers(q) unraw(r) sync(s) show-task-states(t) unmount(u) force-fb(V) show-blocked-tasks(w) 
Fri Mar  3 10:26:17 CET 2017

вот секунд:

# example pid here is just your shell
pid=$$

# current unix time (seconds since epoch [1970-01-01 00:00:00 UTC])
now=$(date +%s)

# process start unix time (also seconds since epoch)
# I'm fairly sure this is the right way to get the start time in a machine readable way (unlike ps)...but could be wrong
start=$(stat -c %Y /proc/"$pid")

# simple subtraction (both are in UTC, so it works)
age=$((now-start))

printf "that process has run for %s seconds\n" "$age"
3
отвечен Peter 2023-04-21 01:43

Да, слишком старые и слишком сложные вещи. Я попытался с выше предложенным методом "stat", но что, если бы у меня было"прикосновение" -ed PID proc dir вчера? Это означает, что мой летний процесс показан со вчерашней отметкой времени. Нет, не то, что мне нужно: (

в более новых, это просто:

ps -o etimes -p <PID>
ELAPSED
339521

как просто. Время присутствует в секундах. Делайте все, что вам нужно. С некоторыми старыми коробками ситуация сложнее, так как нет времени. Можно рассчитывать on:

ps -o etime -p <PID>
ELAPSED
76-03:26:15

которые выглядят "немного" странно, так как он находится в формате dd-hh:mm:ss. Не подходит для дальнейшего расчета. Я бы предпочел его в секундах, поэтому я использовал этот:

ps -o etime -p <PID> --no-headers | awk -F '(:)|(-)' 'BEGIN{a[4]=1;a[3]=60;a[2]=3600;a[1]=86400;s=0};{for (i=NF;i>=1;i--) s=s+a[i]*$i}END{print s}'
339544
2
отвечен George Ivanov 2023-04-21 04:00

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх