使用Perl,如何检查具有给定名称的进程是否正在运行?

Can*_*pus 2 windows perl process

使用Perl,如何检查特定的Windows进程是否正在运行?基本上,我想使用'exec'启动一个进程,但是只有当它还没有运行时我才应该这样做.

那么如何知道具有特定名称的进程是否正在运行?有没有提供此功能的Perl模块?

Gre*_*con 6

看一下使用Win32 :: OLE模块的以下示例.它允许您搜索名称与给定正则表达式匹配的正在运行的进程.

#! perl

use warnings;
use strict;

use Win32::OLE qw(in);

sub matching_processes {
  my($pattern) = @_;

  my $objWMI = Win32::OLE->GetObject('winmgmts://./root/cimv2');
  my $procs = $objWMI->InstancesOf('Win32_Process');

  my @hits;
  foreach my $p (in $procs) {
    push @hits => [ $p->Name, $p->ProcessID ]
      if $p->Name =~ /$pattern/;
  }

  wantarray ? @hits : \@hits;
}

print $_->[0], "\n" for matching_processes qr/^/;
Run Code Online (Sandbox Code Playgroud)