Отформатируйте вывод cputime для ps

Я пытаюсь написать сценарий, который может контролировать использование процессора процесса в течение интервала (для создания графика).

Пока что это команда, которую я использую

ps -p $PROCID -o cputime,etimes 

Моя единственная забота заключается в том, что выход cputime, по-видимому, [dd]hh:mm (или что-то похожее, теперь не может вспомнить)

Есть ли способ форматировать cputime в секундах, вроде etime -> etimes, чтобы получить истекшее время в секундах?

Изменить: это результат, который я получаю в настоящее время

 2-03:01:33 2653793 

Я хочу, чтобы первый параметр был отформатирован за секунды, а не дни-часы: минуты: секунды.

3 Solutions collect form web for “Отформатируйте вывод cputime для ps”

Это преобразует первый раз в секунды:

 ps -p $PROCID -o cputime,etimes | awk -F'[: ]+' '/:/ {t=$3+60*($2+60*$1); print t,$NF}' 

В качестве примера команда ps производит:

 $ ps -p 5403 -o cputime,etimes TIME ELAPSED 01:33:38 1128931 

Команда awk обрабатывает и возвращает:

 ps -p 5403 -o cputime,etimes | awk -F'[: ]+' '/:/ {t=$3+60*($2+60*$1); print t,$NF}' 5618 1128931 

объяснение

  • -F'[: ]+'

    Это говорит awk обрабатывать как двоеточия, так и пробелы как разделители полей. Таким образом, часы, минуты и секунды отображаются как отдельные поля.

  • /:/ {t=$3+60*($2+60*$1); print t,$NF}

    Исходный /:/ ограничивает использование кода только строками, содержащими двоеточие. Это удаляет строки заголовка. Количество секунд вычисляется из часов, минут, секунд через t=$3+60*($2+60*$1) . Полученное значение для t затем печатается вместе с истекшим временем.

Дни обработки

Если ps производит дни, часы, минуты, секунды, как в:

 2-03:01:33 

Затем используйте этот код:

 ps -p $PROCID -o cputime,etimes | awk -F'[-: ]+' '/:/ {t=$4+60*($3+60*($2+24*$1)); print t,$NF}' 

Если дни могут или не могут быть добавлены к выходу, используйте эту комбинационную команду:

 ps -p $PROCID -o cputime,etimes | awk -F'[-: ]+' '/:/ && NF==5 { t=$4+60*($3+60*($2+24*$1)); print t,$NF} /:/ && NF==4 {t=$3+60*($2+60*$1); print t,$NF}' 

Если вы не хотите вводить awk в игру, чистая bash-решение (t_str содержит форматированную строку, t_sec – время декодирования в секундах):

 # Decode the CPU time format [dd-]hh:mm:ss. IFS="-:" read c1 c2 c3 c4 <<< "$t_str" if [ -n "$c4" ] then t_sec=$((10#$c4+60*(10#$c3+60*(10#$c2+24*10#$c1)))) else t_sec=$((10#$c3+60*(10#$c2+60*10#$c1))) fi 

Вы не указываете, для какой операционной системы это необходимо; если это Linux, и учитывая, что вы заинтересованы в мониторинге определенного процесса, вам может показаться более полезным проанализировать /proc/$PROCID/stat – подробнее см. страницу руководства proc(5) .

  • Как фильтровать STAT с помощью ps?
  • awk - значения столбцов по группам и сумме
  • Как преобразовать вывод ps (1) в JSON?
  • Что выбрать - команды BSD или Unix, если они доступны?
  • Разница между процессом ps httpd и процессом deamon httpd
  • Как найти идентификатор процесса команды, запущенной в другом терминале?
  • Пользователь Docker, выполняющий процесс, не может быть удален
  • Как начать два процесса, поддерживаемых свиньями? Итак, первый заканчивается, когда второй заканчивается?
  • Использование процессора в соответствии с ps и operf
  • Как отсортировать вывод ps для поиска приоритетов в реальном времени и определить обработанную текущую очередь процесса
  • Как я могу получить полный список процессов в Solaris без усеченных линий?
  • Interesting Posts

    Почему KDE / плазменный шрифт изменяет размер шрифта в случайном порядке при изменении размера монитора?

    Неизвестный двоичный блок в / var / log / syslog

    Как автоматизировать открытие Firefox через туннель ssh?

    генерировать маршрутизируемый трафик для целей тестирования

    Как запретить файловому файлу Matlab делать какие-либо изменения в файловой системе?

    как я могу прокомментировать / в разделе в исходном коде с sed или awk

    Предотвращение автомонтирования в CentOS 7

    Почему PGID моего дочернего процесса обрабатывает не PID родителя?

    Может ли определяемое пользователем свойство «destroy-after» установить на снимке ZFS?

    Процесс Rogue Java останавливает мой компьютер

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

    Как добавить configure для добавления шлюза по умолчанию из другой подсети?

    Запись, начиная с определенного номера строки в текстовом файле

    Как запустить скрипт, когда я нажимаю клавиши Alt + Tab, поддерживающие «Window Switcher Dialog»?

    Почему принудительно fsck при включении Sheevaplug?

    Linux и Unix - лучшая ОС в мире.