1

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

任何的想法?

4

1 回答 1

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。

于 2013-04-24T12:40:45.523 回答