2011-10-04 22 views
2

我想編寫一個可以作爲Windows服務運行的腳本。當用戶使用該進程時,它將重新啓動進程表中激活的進程並超過例如500MB的RAM。我怎樣才能做到這一點?有人可以提出任何示例嗎?重新啓動超過RAM的進程的腳本

回答

3

總有骯髒的方式。在Windows中使用tasklist

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};