如何在perl中指定unix命令的参数

时间:2017-03-09 09:42:30

标签: perl unix rhel

我试图找到没有通过perl运行的进程。它适用于使用以下代码但不适用于cgred服务的某些进程。

foreach $critproc (@critarray)
    {
    #system("/usr/bin/pgrep $critproc");
    $var1=`/usr/bin/pgrep $critproc`;
    print "$var1";
    print "exit status: $?\n:$critproc\n";
    if ($? != 0)
            {
            $probs="$probs $critproc,";
            $proccrit=1;
            }
    }

对于cgred,我必须指定/usr/bin/pgrep -f cgred来检查是否有任何pid与之关联。 但是,当我在上面的代码中指定-f时,它会向所有进程提供退出状态0$?),即使它没有运行。

你能不能告诉我如何在Perl中将参数传递给unix命令。

由于

1 个答案:

答案 0 :(得分:4)

// query to fetch the data from RequestArticles table and set join for store table twice $requestArticlesDetaile = $this->RequestArticles->get($id, [ 'contain' => ['yourstore','fromstore'] ]); // set fetched data to view $this->set('requestArticlesDetaile', $requestArticlesDetaile); 是什么?您说的$critproc在哪里给您带来问题?有人可能会想到你有某种逃避问题,但如果-f $critproccgred,那就不应该这样了。

鉴于这些问题,我只想回答一般性问题。

以下内容避免了shell,因此无需构建shell命令:

system("/usr/bin/pgrep", "-f", $critproc);
die "Killed by signal ".( $? & 0x7F ) if $? & 0x7F;
die "Exited with error ".( $? >> 8 ) if ($? >> 8) > 1;
my $found = !($? >> 8);

如果需要shell命令,可以使用String :: ShellQuote' shell_quote来构建它。

use String::ShellQuote qw( shell_quote );

my $shell_cmd = shell_quote("/usr/bin/pgrep", "-f", $critproc) . " >/dev/null";
system($shell_cmd);
die "Killed by signal ".( $? & 0x7F ) if $? & 0x7F;
die "Exited with error ".( $? >> 8 ) if ($? >> 8) > 1;
my $found = !($? >> 8);

use String::ShellQuote qw( shell_quote );

my $shell_cmd = shell_quote("/usr/bin/pgrep", "-f", $critproc);
my $pid = `$shell_cmd`;
die "Killed by signal ".( $? & 0x7F ) if $? & 0x7F;
die "Exited with error ".( $? >> 8 ) if ($? >> 8) > 1;
my $found = !($? >> 8);