我想编写一个可以作为 Windows 服务运行的脚本。当用户正在使用进程并且它超过例如 500mb RAM 时,它将重新启动进程表中事件的进程。我怎样才能做到这一点?有人可以举个例子吗?
最佳答案
总有肮脏的方式。在 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};
关于perl - 重新启动超出 RAM 的进程的脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7649336/