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

Ну, я предполагаю, что необходимо было бы смонтировать раздел окон на человечности. Можно найти всестороннее учебное руководство здесь:

https://help.ubuntu.com/community/MountingWindowsPartitions

12
01.01.2017, 10:24
3 ответа

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

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 долларов США) . Результирующее значение для 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}'
9
27.01.2020, 19:56

Если вы не хотите использовать 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
2
27.01.2020, 19:56

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

0
27.01.2020, 19:56

Теги

Похожие вопросы