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



Управление процессами в NT/2000 - часть 3


Process ID Process Name

format STDOUT =

@<««« @««« ««««««««««««

$pid, $name

Получаем результат:

Process ID Process Name

======= ===========

0 System-Idle

2 System

25 smss.exe

39 winlogon.exe

41 services.exe

48 lsass.exe

78 spoolss.exe

82 OKSERVICE.EXE

Отличие от действий pulist.exe заключается в том, что Win32: : IP roc не может сообщить вам пользовательский контекст для процесса. Если эта информация для вас важна, то следует применять pulist.exe.

pulist.exe может вывести только один тип информации, а что может Win32: - сейчас будет ясно. Допустим, вам хочется узнать не только о запущенных процессах, но и о том, какие исполняемые программы и динамически загружаемые библиотеки (.сШ) использует каждый процесс. Получить эту информацию просто:

импортируем постоянную FULLPATH.

чтоб показывать пути к

библиотекам, может быть и NOPATH use

Win32:.IProc "FULLPATH": Spobj = пел Win32::IProc:

$pobj ->EnuTiProcesses(\5processlist) or die

"Невозможно список процессов : $;

foreach Sp^ocess (?processlisr){ print "\n".

$p^ocess->(D''ocessNaTie!

"\n".(' = ' x length($orocess->{ProcessNa~e})!. "-n":

Vswodules,FULLPATH); print join("\n", map {lc $_->

{Modul'eName}} ^modules), "\n":

}

GetProcessModules() получает идентификатор процесса, ссылку на массив и флаг, говорящий о том, возвращать ли полный путь к библиотеке. Элементами массива, на который мы ссылаемся, являются ссылки на анонимные хэши, содержащие информацию о каждой библиотеке, используемой этим процессом. В нашем примере собираются имена всех библиотек. тар() используется для того, чтобы обойти весь массив ссылок, разыменовывать каждый анонимный хэш и получить значение ключа ModuleName.

Вот отрывок полученных данных:

smss.exe

\systemroot\system32\smss.exe c:\winnt\system32\ntdll.dll

winlogon.exe

\??\с:\winnt\system32\winlogon.exe

c:\winnt\system32\ntdll.dll

c:\winnt\system32\msvcrt.dll

c:\winnt\system32\kernel32.dll




Содержание  Назад  Вперед