Другое расширение - выполненное управление
Во вторник, 4 ноября 2003, goldwyn Родриг записал:
Кто-либо знает то, что RC (в bashrc/mailrc/...) средства или как это произошло? Я имею в виду, действительно ли это - акроним? Если да, что это обозначает?
'дистанционное управление' обозначает 'выполненное управление' и является конвенцией, принятой от более старых систем Unix.
Поскольку больше информации видит это: http://www.catb.org/~esr/writings/taoup/html/ch10s03.html
На Linux с ps
от procps(-ng)
(и большинство других систем, так как это указано POSIX):
ps -o etime= -p "$$"
Где $$
PID процесса, который Вы хотите проверить. Это возвратит прошедшее время в формате [[dd-]hh:]mm:ss
.
Используя -o etime
говорит ps
то, что Вы просто хотите поле прошедшего времени, и =
в конце этого подавляет заголовок (без, Вы получаете строку, которая говорит ELAPSED
и затем время на следующей строке; с, Вы получаете всего одну строку со временем).
Или, с более новыми версиями procps-ng комплекта инструментов (3.3.0 или выше) на Linux или на FreeBSD 9.0 или выше (и возможно другие), используйте:
ps -o etimes= -p "$$"
(с добавленным s
) отформатировать время так же, как секунды, который более полезен в сценариях.
На Linux, ps
программа получает это от /proc/$$/stat
, где одно из полей (см. man proc
) время начала процесса. Это, к сожалению, указано, чтобы быть временем в миге (счетчик произвольного момента времени, используемый в ядре Linux) начиная с начальной загрузки системы. Таким образом, необходимо определить время в который загруженная система (от /proc/stat
), количество мига в секунду в этой системе, и затем делает математику для получения прошедшего времени в полезном формате.
Это оказывается смехотворно сложным для нахождения значения Гц (то есть, миг в секунду). Из комментариев в sysinfo.c
в procps пакете можно A) включать файл заголовка ядрa и перекомпилировать, если другое ядро используется, B) использовать posix sysconf()
функция, которая, к сожалению, использует трудно кодированное значение, скомпилированное в библиотеку C или C), спрашивает ядро, но нет никакого официального интерфейса к выполнению этого. Так, ps
код включает серию клуджей, которыми он определяет правильное значение. Ничего себе.
Таким образом, это удобно это ps
делает это все для Вас.:)
Как пользователь @336_ примечания, на Linux (это не портативно), можно использовать stat
управляйте для рассмотрения доступа, модификации или дат изменения состояния каталога /proc/$$
(где снова $$
процесс интереса). Все три числа должны быть тем же, таким образом,
stat -c%X /proc/$$
даст Вам время тот процесс $$
запущенный, в секундах с эпохи. Это все еще не вполне, что Вы хотите, так как все еще необходимо сделать математику для вычитания этого с текущего времени для получения прошедшего времени — я предполагаю что-то как date +%s --date="now - $( stat -c%X /proc/$$ ) seconds"
работал бы, но это немного неловко. Одно возможное преимущество - это при использовании вывода длинного формата как -c%x
вместо -c%X
, Вы получаете большее разрешение, чем секунды целого числа. Но при необходимости в этом необходимо, вероятно, использовать контролирующий процесс подход, потому что синхронизация выполнения команды статистики собирается вмешаться в точность.
Портативный:
% ps -o stime,time $$
STIME TIME
Jan30 00:00:06
т.е. та оболочка была запущена 30 января и составила приблизительно 6 секунд процессорного времени.
Там может быть более точным или более parseable, но меньше портативных способов получить эту информацию. Проверьте документацию Вашего ps
команда или Ваш proc
файловая система.
В соответствии с Linux, эта информация живет в /proc/$pid/stat
.
awk '{print "CPU time: " $14+$15; print "start time: " $22}' /proc/$$/stat
Процессорное время находится в миге; я не знаю бесцеремонно, как найти значение мига от оболочки. Время начала относительно времени начальной загрузки (найденный в /proc/uptime
).
sysinfo.c
в procps пакете каждый может a) включать файл заголовка ядрa (и перекомпилируйте, если другое ядро используется, b) используют posix sysconf () функция, которая, к сожалению, использует трудно кодированное значение, скомпилированное в c библиотеку, или c) спросите ядро, и нет никакого официального интерфейса к выполнению этого. Так, код включает серию клуджей, которыми он определяет правильное значение. Ничего себе.
– mattdm
22.02.2011, 23:54
ps
страница справочника указывает это time
"кумулятивное процессорное время". Я думаю, что искал OP, etime
, или "прошедшее время, так как процесс был запущен". pubs.opengroup.org/onlinepubs/000095399/utilities/ps.html
– rinogo
23.04.2014, 23:35
etime
,все же.
– n.st
23.05.2016, 14:34
ps
берет a -o
опция указать выходной формат и один из доступных столбцов etime
. Согласно странице справочника:
etime - прошедшее время начиная с процесса было запущено в форме [[dd-] гд:] mm:ss.
Таким образом можно выполнить это для получения PID и прошедшее время каждого процесса:
$ ps -eo pid,etime
Если Вы хотите прошедшее время конкретного PID (например, 12345), можно сделать что-то как:
$ ps -eo pid,etime | awk '/^12345/ {print $2}'
(Редактирование: Повороты там являются более коротким синтаксисом для вышеупомянутой команды; см. ответ mattdm),
Если можно выполнить время и затем выполнить команду, Вы получите точно, что Вы ищете. Вы не можете сделать этого против уже рабочей команды.
[0] Время % спит 20
спите 20 0,00 пользователя с 0,00 системных общих количества cpu 20.014 0% с
Не знаю, почему это еще не было предложено: в Linux вы можете stat ()
каталог / proc / [nnn] для ваш PID.
Это поведение явно предназначено для возврата времени запуска процесса, что оно может делать с высоким разрешением, и что ядро может делать точно без взломов jiffies, поскольку ядро может (очевидно) просто проверять соответствующую информацию. Поля доступа, изменения данных и изменения статуса возвращают время начала процесса.
Лучше всего то, что вы можете использовать stat (1)
в оболочке или соответствующую привязку к stat (2)
из $ favourite_programming_language, так что вам может даже не понадобиться запустить внешний процесс.
ПРИМЕЧАНИЕ , что это не работает с / usr / compat / linux / proc
на FreeBSD; возвращаемое время доступа / модификации / изменения статуса - это текущее время, а время рождения - это эпоха UNIX. Довольно глупо, что поддержки нет, если вы спросите меня.
$ ps -eo lstart
получить время начала
$ ps -eo etime
получить продолжительность/прошедшее время
$ ps -eo pid,lstart,etime | grep 61819
PID STARTED ELAPSED
61819 Mon Sep 17 03:01:35 2018 07:52:15
61819 — это идентификатор процесса.
Прошедшее время в секундах:expr $(date +"%s") - $(stat -c%X /proc/<PID HERE>)
вы можете получить время начала процесса, взглянув на stat
файла статистики, созданного proc
, отформатируйте его, используя date
и вычтя его из текущего времени:
echo $(( $(date +%s) - $(date -d "$(stat /proc/13494/stat | grep Modify | sed 's/Modify: //')" +%s) ))
где 13494
— pid вашего процесса
Удобная функция, основанная на "ps -o etime=" и "bc", помогающая с математикой и ноль дополненных слева чисел.
Дайте ему pid и верните текущие минуты.
function running_time (){
# correct up to 100 days! #08:28:40 #53:32 #15-01:23:00
p=$1 ; i=$(ps -o etime= $p) ; i=$(echo $i) ;
len=${#i}
[[ $len == 5 ]] && i="00-00:$i" ; [[ $len == 8 ]] && i="00-$i"
[[ $len == 10 ]] && i="0$i"
mins=$(echo ${i:0:2}*24*60+${i:3:2}*60+${i:6:2}|bc)
echo $mins
}
etime=
опечатка? Я могу только найтиetime
в страницах справочника. – Kent Pawar 27.06.2013, 16:01=
подавляет заголовок. Попробуйте его без, или попыткаps -p $$ -o etime="Silly Header Here"
– mattdm 27.06.2013, 16:28etimes
самостоятельно, поскольку затем это - машиночитаемый – Asfand Qazi 15.07.2015, 12:35sysconf()
и поэтому дает Вам трудно кодированное значение из библиотеки C, как отмечено, не так ли? – mattdm 01.04.2016, 04:55