2017-03-09 2 views
0

angeben Ich versuche, die Prozesse zu finden, die nicht durch Perl laufen. Es funktioniert für einige Prozesse mit folgendem Code, jedoch nicht für den cgred-Service.wie Argumente in Unix-Befehl in Perl

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

Für cgred Ich habe /usr/bin/pgrep -f cgred angeben zu überprüfen, ob eine pid mit ihm verbunden ist oder nicht. Aber wenn ich -f in obigen Code angeben, gibt es den Exit-Status 0 ($?) zu allen Prozessen, auch wenn es nicht ausgeführt wird.

Kann mir jemand sagen, wie man Argumente an Unix-Befehl in Perl übergeben.

Dank

Antwort

4

Was $critproc ist? Wo ist die -f Sie sagen, gibt Ihnen Probleme? Man könnte sich vorstellen, dass Sie eine Art von Fluchtproblem haben, aber das sollte nicht der Fall sein, wenn $critproccgred ist, wie Sie scheinen zu implizieren.

Angesichts dieser Probleme werde ich nur die allgemeine Frage beantworten.


Die folgende vermeidet die Schale, so dass keine Notwendigkeit, einen Shell-Befehl zu bauen:

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

Wenn Sie einen Shell-Befehl benötigen, können Sie String :: ShellQuote die Verwendung shell_quote ihn zu bauen.

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

oder

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