Я пытаюсь написать сценарий, который может контролировать загрузку процессора процесса в течение определенного промежутка времени (для создания графика).
Пока что это команда, которую я использую
ps -p $PROCID -o cputime,etimes
Единственное, что меня беспокоит, так это то, что cputime выводится [dd]hh:mm
(или что-то подобное, не могу вспомнить сейчас)
Есть ли способ отформатировать cputime в секундах, например, etime -> etimes, чтобы получить истекшее время в секундах?
Изменить: это вывод, который я в настоящее время получаю
2-03:01:33 2653793
Я бы хотел, чтобы первый параметр форматировался в секундах, а не в днях, часах, минутах и секундах.
bash
ps
text-formatting
dreadiscool
источник
источник
Ответы:
Это преобразует первый раз в секунды:
В качестве примера команда ps выдает:
Команда
awk
обрабатывает это и возвращает:объяснение
-F'[: ]+'
Это говорит awk рассматривать двоеточия и пробелы как разделители полей. Таким образом, часы, минуты и секунды отображаются в виде отдельных полей.
/:/ {t=$3+60*($2+60*$1); print t,$NF}
Исходный
/:/
код ограничивает работу кода только строками, которые содержат двоеточие. Это удаляет строки заголовка. Количество секунд рассчитывается из часов, минут, секунд черезt=$3+60*($2+60*$1)
. Полученное значение дляt
затем печатается вместе с прошедшим временем.Обработка дней
Если
ps
выдает дни, часы, минуты, секунды, как в:Затем используйте этот код вместо:
Если дни могут быть или не быть добавлены к выводу, то используйте эту комбинационную команду:
источник
Если вы не хотите вносить awk в игру, используйте решение bash (t_str содержит форматированную строку, t_sec - время декодирования в секундах):
источник
Вы не указываете, для какой операционной системы это; если это Linux, и, учитывая, что вы заинтересованы в мониторинге определенного процесса, вам может быть целесообразнее его проанализировать
/proc/$PROCID/stat
- подробности см. наproc(5)
странице руководства.источник