Разбираем linux «top» в PHP?

Я работаю над инструментом мониторинга в PHP. Он должен отображать использование% ЦП одного процесса с помощью PID. Имейте в виду, что я не могу использовать ps, потому что он берет общее использование и делит его на время выполнения процесса. Так что это среднее использование. Мне нужно использовать в момент запуска файла php.

Вот то, что я пытаюсь, кажется, что оно близко к тому, что мне нужно в терминале, но php ничего не печатает.

$cmd = "top -n 1 -p 30100";
echo exec($cmd);

Может быть, есть другой лучший способ сделать это? Я могу установить утилиты, если они обеспечивают необходимую мне функциональность.

TL; DR Мне нужен% ЦП процесса по PID, настолько простой, насколько это возможно, чтобы избежать разбора

0

Решение

top -n1 -p 30100 |grep -e 30100 | awk '{print $10}'
0

Другие решения

Знайте, что нет такой вещи, как мгновенное использование процессора%. Это как FPS в играх: это имеет смысл, только если вы спрашиваете об определенном интервале времени. В любой конкретный момент загрузка ЦП процесса просто «да» или «нет». Там нет процента.

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

Абсолютно. Если вы хотите сделать это самостоятельно, вы можете разобрать /proc/<pid>/stat и вытащить utime а также stime поля — 14-е и 15-е целые числа соответственно. Подождите одну секунду, скажем, а затем посмотрите, насколько изменились эти поля.

Увидеть man proc для полного описания полей в этом файле.

Страница man говорит, что единицы измерения — это такты, где число тактов в секунду является переменным (функция C sysconf(_SC_CLK_TCK) дает вам номер). В моем (по общему признанию ограниченном) опыте единицы — просто 1/100-ые секунды. Значение делить эти числа на 100, чтобы получить количество секунд.

Не могли бы вы предоставить фрагмент, как я это сделаю? Я не такой опытный. Вот как я себе это представляю, может быть, 10 циклов for () со сном 100 мс, а затем рассчитать на основе десяти значений?

Там нет необходимости брать более двух образцов.

1