Perl для системного администрирования

Управление процессами в Unix Стратегии


Во всех современных вариантах операционной системы Unix есть команда ps, применяемая для получения списка запущенных процессов. Однако в каждом конкретном случае она расположена в различных местах, а аргументы командной строки, которые она принимает, тоже не совпадают. Отсюда и проблема с ее применением: она недостаточно переносима.

Еще более неприятная проблема - это сложность анализа вывода (который тоже отличается в различных версиях). Вот как выглядит вывод команды ps на машине с SunOS:

USER PID %CPU %MEM SZ RSS TT STAT START TIME COMMAND

dnb 385 0.0 0.0 268 0 p4 IW Jul 2 0:00 /bin/zsh

drib 24103 0.0 2.610504 1092 p3 S Aug 10 35:49 emacs

dnb 389 0.0 2.5 3604 1044 p4 S Jul 2 60:16 emacs

remy 15396 0.0 0.0 252 0 p9 IW Jul 7 0:01 -zsn (zsh)

sys 393 0.0 0.0 28 0 7 IW Jul 2 0: 02 in, ider.td

dnb 29488 0.0 0.0 68 0 p5 IW 20:15 0:00 scree:

dnb 29544 0.0 0.4 24 148 p7 R 20:39 0:00 less

dnb 5707 0.0 0.0 260 0 p6 IW Jul 24 0,00 -)

root 28766 0,0 0.0 244 0 "> IW 13:20 0:00 - 0 xd

Обратите внимание на третью строку. Два столбца в ней слились вместе и при анализе вывода разобраться в этом будет непросто. Нет, это возможно, но просто действует на нервы. В некоторых вариантах Unixj дела обстоят лучше, но это обстоятельство следует учитывать. Программа на Perl, применяемая в этом случае, прямолинейна: в ней используются орем() для запуска ps, whilei<KH.-0{...} для чтения вывода и split(), unpackO или substrQ для анализа данного вывода. Совет по этому поводу можно найти в книге Тома Кристиансена (Tom Christiansen) и Натана Торкингтона (Nathan Torkington) «Perl: Библиотека программиста», изд-во «Питер», 2000 г. («Perl Cookbook», O'Reilly).



Содержание раздела