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



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


завершить процесс и заставить его вернуть именно этот код

$pobj->Kill($handle.$exitcode);

Но дескрипторы процессов следует применять не только для того, чтобы завершать работу процесса. Например, можно использовать такие методы, как GetStatusQ, чтобы больше узнать о процессе. Вот пример кода, который выводит информацию о времени для заданного идентификатора процесса:

use Win32::IProc qw(

PROCESS_QUERY_INFORMATION INHERITED DIGITAL);

$pobj = new Win32::IProc;

$pobj->Open($ARGV[0],PROCESS_QUERY_INFORMATION, INHERITED. \$handle) or warn

"Невозможно получить дескриптор:".$pobj->LastError()."\n";

ft DIGITAL = время в понятном формате $pouj->

GetStatus($handle,\$statusinfo.DIGITAL):

$pobj->CloseHandle($handle):

while ((Sprocname,$vaiue)=eacn %$statusinfo){

print "$procname: $value\n":

}

В результате получается что-то приблизительно следующее:

Kernelrii?L-: 00;00:22:442:270 Fxituate:

ExitTime:

CreationDate: 29/7/1999 CreationTime:

17:09:28:100

UserTime:

00:00:11:566:632

Теперь известно, когда процесс был запущен и сколько системного времени он занимает. Поля ExitDate и ExitTime пусты, поскольку процесс все еще активен. Вы могли бы спросить, как эти поля, в принципе, могут оказаться не пустыми, если для получения дескриптора нужно использовать идентификатор работающего процесса? На этот вопрос есть два ответа. Во-первых, можно получить дескриптор для работающего процесса, а затем заставить этот процесс завершиться до того, как вы закроете дескриптор. GetStatusO в таком случае вернет информацию о завершении работы для умершего процесса. Вторая возможность получить эту информацию- использовать метод Сгеate(), о котором мы пока еще не знаем.

Create О

позволяет запускать процессы из Win32: так же, как и в случае с Win32::Process. Если запустить процесс при помощи модуля, то объект процесса ($pobj), который до сих пор не обсуждался, будет содержать информацию о самом процессе и потоках. Обладая этой информацией, вы сможете делать любопытные вещи, например, манипулировать приоритетами потоков и окнами этого процесса. Мы не собираемся рассматривать эти возможности, но упомянуть о них следует, чтобы спокойно перейти к следующему модулю.




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