2017-03-09 17 views
0

私はperlで動作していないプロセスを見つけようとしています。これは以下のコードを使用するいくつかのプロセスでは動作しますが、cgredサービスでは動作しません。 cgredについてはperlでunixコマンドへの引数を指定する方法

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; 
      } 
    } 

私は、任意のpidがそれに関連付けられているかどうかをチェックするために/usr/bin/pgrep -f cgredを指定する必要があります。 上記のコードで-fと指定すると、実行されていなくてもすべてのプロセスに対して終了ステータス0$?)が与えられます。

Perlでunixコマンドに引数を渡す方法を教えてもらえますか?

おかげ

答えて

4

$critprocは何ですか? -fはどこに問題があると言いますか?ある人が何か問題を抱えていると想像するかもしれませんが、$critproccgredの場合は暗黙のようです。

これらの問題を考えると、私は一般的な質問に答えるつもりです。


以下は、シェルコマンドを構築するので、必要にシェルを回避しません:

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

あなたはシェルコマンドが必要な場合は、文字列を使用することができます:: 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); 
関連する問題