Есть ли способ получить статистику процесса, используя Perl или Python? - PullRequest
2 голосов
/ 24 апреля 2009

Есть ли способ общего получения статистики процесса с использованием Perl или Python? Мы могли бы оставить это специфичным для Linux.

Есть несколько проблем: я не буду знать PID заранее, но я могу запустить рассматриваемый процесс из самого скрипта. Например, у меня не будет проблем с выполнением:

./myscript.pl some/process/I/want/to/get/stats/for

По сути, я бы хотел, по крайней мере, получить потребление памяти процессом, но чем больше информации я могу получить, тем лучше (например, время выполнения процесса, среднее использование процессора процессом и т. Д. ) * +1010 *

Спасибо.

Ответы [ 3 ]

7 голосов
/ 24 апреля 2009

Посмотрите на модуль Proc :: ProcessTable , который возвращает довольно мало информации о процессах в системе. Вызовите метод «fields», чтобы получить список деталей, которые можно извлечь из каждого процесса.

Недавно я обнаружил вышеупомянутый модуль, который почти заменил модуль Process, который я написал при написании программы Perl kill для Linux. Вы можете посмотреть мой сценарий здесь .

Его можно легко расширить, чтобы извлечь дополнительную информацию из команды ps. Например, метод ' getbycmd ' возвращает список pid, чей вызов командной строки соответствует переданному аргументу. Затем вы можете получить сведения о конкретном процессе, вызвав ' getdetail ', передав ему PID следующим образом:

my $psTable = Process->new();

# Get list of process owned by 'root'
for my $pid ( $psTable->getbyuser("root") ) {

    $psDetail = $psList->getdetail( $pid );
    # Do something with the psDetail..

}
2 голосов
/ 24 апреля 2009

Если вы fork() ребенок, вы будете знать, что это PID.

Из родительского элемента вы можете затем проанализировать файлы в /proc/<PID/, чтобы проверить использование памяти и ЦП, хотя только в течение всего времени, пока запущен дочерний процесс.

1 голос
/ 24 апреля 2009

Распространенным заблуждением является то, что чтение / процесс похоже на чтение / дом. / proc предназначен для предоставления вам той же информации с одним open (), которую могли бы предоставить 20 похожих системных вызовов, заполняющих некоторую структуру. Чтение этого не загрязняет буферы, отправляет невинные программы в адский пейджинг или иным образом способствует гибели котят.

Доступ к / proc / foo просто говорит ядру "дать мне информацию о foo, которую я могу обрабатывать не зависящим от языка образом"

Если вам нужна дополнительная информация о том, что находится в / proc / {pid} /, обновите свой вопрос, и я опубликую их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...