2017-03-09 2 views
0

J'essaie de trouver les processus qui ne sont pas exécutés par perl. Cela fonctionne pour certains processus utilisant le code suivant mais pas pour le service cgred.comment spécifier les arguments de la commande unix en 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; 
      } 
    } 

Pour cgred je dois préciser /usr/bin/pgrep -f cgred pour vérifier si une pid est associée à ou non. Mais quand je spécifie -f dans le code ci-dessus, il donne le statut de sortie 0 ($?) à tous les processus même si ce n'est pas en cours d'exécution.

Pouvez-vous me dire comment passer des arguments à la commande unix en Perl.

Merci

Répondre

4

Qu'est-ce que est $critproc? Où est le -f que vous dites vous donner des problèmes? On pourrait imaginer que vous avez une sorte de problème d'échappement, mais cela ne devrait pas être le cas si $critproc est cgred comme vous semblez l'indiquer. Compte tenu de ce problème, je vais juste répondre à la question générale.


qui suit évite la coquille, donc pas besoin de construire une commande 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); 

Si vous avez besoin d'une commande shell, vous pouvez utiliser String :: shellquote de shell_quote pour le construire.

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

ou

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