Alo*_*dal 2 windows perl process
如何在Windows中获取有关其他(与perl.exe无关)进程的信息?
说,我有一个脚本,希望监视有关所有firefox.exe进程的一些基本信息.
我想做的事情如下:
#!perl -w
use warnings;
use strict;
use MagicModule qw/ read_process_info /;
use Data::Dumper;
my $ps = MagicModule::read_process_info();
print Dumper($ps);
Run Code Online (Sandbox Code Playgroud)
并看到类似的东西:
$VAR = [
{
ProcessName => 'firefox.exe',
PID => 1234,
PirvateBytes => 21153546,
WorkingSet => 134566354,
# etc...
},
{
ProcessName => 'firefox.exe',
PID => 1556,
PirvateBytes => 15435487,
WorkingSet => 245774448,
# etc...
},
{
ProcessName => 'calc.exe',
PID => 2777,
PirvateBytes => 1024,
WorkingSet => 4096,
# etc...
},
];
Run Code Online (Sandbox Code Playgroud)
因为我通过解析Systinternals的PsExec的输出来获得这个信息,但显然这根本没有效率.
有什么好的Perl方法来获取这些数据?
(在Windows XP-Windows 7上使用Strawberry Perl的解决方案将是首选.)
使用WMI Win32::OLE是我见过的最简单的方法之一:
use Win32::OLE qw<in>;
use constant wbemFlagReturnImmediately => 0x10;
use constant wbemFlagForwardOnly => 0x20;
my $objWMIService
= Win32::OLE->GetObject( 'winmgmts:\\\\localhost\root\CIMV2' )
or die 'WMI connection failed.\n'
;
my @processes
= in $objWMIService->ExecQuery(
'SELECT * FROM Win32_Process'
, 'WQL'
, wbemFlagReturnImmediately | wbemFlagForwardOnly
);
Run Code Online (Sandbox Code Playgroud)
然后你可以在这里查阅对象定义.请记住,可以像散列键或方法名一样访问每个字段:( $_->{Caption}或$_->Caption)
| 归档时间: |
|
| 查看次数: |
1164 次 |
| 最近记录: |