2013-04-24 105 views
1

我正在寻找获取Windows机器上运行进程(和服务)列表的最标准方法。重要的是不要使用“现代”的东西,因为我会在旧服务器上部署该程序。Windows正在运行进程列表perl

任何想法?

+0

'my $ process = \'ps \'; '这是过时的吗? – 2013-04-24 11:45:08

+1

它可以在Windows上使用吗? – phaazon 2013-04-24 12:06:40

+0

我的不好!没有看到'Windows'。 – 2013-04-24 12:09:50

回答

5

正如提到的skp,tasklist命令可以完成它(在Windows XP上测试)。

这里是由PID产生过程的哈希一个小脚本:

use warnings; 
use strict; 

my @procs = `tasklist`; 

#Find position of PID based on the ===== ====== line in the header 
my $pid_pos; 
if ($procs[2] =~ /^=+/) 
{ 
    $pid_pos = $+[0]+1; 
} 
else 
{ 
    die "Unexpected format!"; 
} 

my %pids; 
for (@procs[3 .. $#procs]) 
{ 
    #Get process name and strip whitespace 
    my $name = substr $_,0,$pid_pos; 
    $name =~s/^\s+|\s+$//g; 

    #Get PID 
    if (substr($_,$pid_pos) =~ /^\s*(\d+)/) 
    { 
     $pids{$1} = $name; 
    } 
} 

use Data::Dumper; 
print Dumper %pids; 

另一种方法,可能是有用的是Win32::Process::List。它使用核心的Windows C函数获取进程列表。它似乎与旧版本的Perl一起工作。