Скрипт для перезапуска процесса, превышающего оперативную память - PullRequest
2 голосов
/ 04 октября 2011

Я хочу написать скрипт, который может работать как служба Windows.Он будет перезапускать процесс, активный в таблице процессов, когда пользователь использует процесс, и он превышает, например, 500 МБ ОЗУ.Как я могу это сделать?Может кто-нибудь предложить какой-нибудь пример?

1 Ответ

3 голосов
/ 05 октября 2011

Там всегда грязный путь. Использование tasklist в Windows:

use List::Util qw<first>;

my ( $mem )      
    = map   { ( my $a = $_ ) =~ s/,//g; $a } 
      grep  {; length } 
      map   { m/([\d,]+)[ ]K$/ } 
      first { m/^perl\.exe\s+$$\b/ } 
      `tasklist`;

if ( $mem > MAX_MEM ) {
    do_something();
}

Но, насколько я понимаю, вы также можете сделать это следующим образом: Win32::Process::Info:

use Win32::Process::Info;
my  $pi = Win32::Process::Info->new ();
my $set = first { exists $_->{WorkingSetSize} } $pi->GetProcInfo( $$ );
my $mem = $set && $set->{WorkingSetSize};
...