3

Я программирую на Bash и пытаюсь выяснить, сколько процессорного времени было использовано за последнюю секунду. Мне также нужно разделить systime (режим ядра) и usertime (режим пользователя).

Я заглянул в топ, но я новичок в использовании UNIX/Terminal, поэтому мне не удалось получить что-то оттуда.

Спасибо за вашу помощь.

1 ответ1

4

Вы можете использовать утилиту vmstat(8) . Это часто не устанавливается в системах Linux по умолчанию, поэтому, если он отсутствует в вашей системе, вам нужно установить его с помощью системного менеджера пакетов.
В Fedora Core это часть пакета sysstat .

Пример вывода:

$ vmstat 1 2
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 0  0    752 136480  31204 392176    0    0     2     1   40  101  0  0 99  0
 0  0    752 138268  31344 392416    0    0     0     0   59  205  0  1 99  0

Первая строка - это среднее значение после перезагрузки, вторая строка - это выборка последней секунды.

Вы хотите, чтобы статистика процессора, очевидно, значение столбцов (с man-страницы):

   CPU
       These are percentages of total CPU time.
       us: Time spent running non-kernel code.  (user time, including nice time)
       sy: Time spent running kernel code.  (system time)
       id: Time spent idle.  Prior to Linux 2.5.41, this includes IO-wait time.
       wa: Time spent waiting for IO.  Prior to Linux 2.5.41, included in idle.
       st: Time stolen from a virtual machine.  Prior to Linux 2.6.11, unknown.

Вы можете использовать awk(1) для получения значений, например:

vmstat=$(vmstat 1 2 | tail -1)

# Kernel time
sys=$(echo "$vmstat" | awk '{print $14}')

# User time
sys=$(echo "$vmstat" | awk '{print $13}')

Смежный вопрос: Как получить общее использование процессора (например, 57%) в Linux [закрыто]

Это должно работать на Linux, FreeBSD и, возможно, MacOSX.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .