如何获取有关 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);
并看到类似的内容:
$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...
},
];
因为我是通过解析 Systinternals 的 PsExec 的输出来获取此信息的,但显然这根本没有效率。
获取这些数据有哪些不错的 Perl 方法?
(在 Windows XP 上使用 Strawberry Perl 的解决方案 - Windows 7 是首选。)
最佳答案
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
);
然后可以查阅对象定义here 。请记住,每个字段都可以像哈希键或方法名称一样进行访问:( $_->{Caption}
或 $_->Caption
)
关于windows - 获取有关 Windows 上其他进程的信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10175667/