7
votes

Obtention des valeurs d'état de sortie de GNU parallèle

Le wrapper PERL ci-dessous exécute des commandes en parallèle, sauvegarde de stdout et STDERR TO / TMP Fichiers:

open(A,"|parallel"); 
for $i ("date", "ls", "pwd", "factor 17") { 
  print A "$i 1> '/tmp/$i.out' 2> '/tmp/$i.err'\n"; 
} 
close(A); 


2 commentaires

Retentrés avec perl et code de sortie


@pavel, GNU parallèle, selon le sujet


4 Réponses :


6
votes

Pour obtenir le statut existant des emplois individuels, parallèle aurait besoin d'écrire les informations quelque part. Je ne sais pas si ça le fait ou non. Si ce n'est pas le cas, vous pouvez le faire vous-même. XXX


MISE À JOUR : Je suis allé installé parallèle .

Il a une option appelée - joblog {fichier} qui produit un rapport avec des codes de sortie. Il accepte - pour le nom de fichier si vous souhaitez que la sortie sur stdout.

Notez que parallèle ne reconnaît pas la mort anormale par signal, donc ceci n'est pas inclus dans le rapport - JOBLOG . En utilisant la solution i Publiée ci-dessus, un fichier .exit manquant indiquerait une mort anormale. (Vous devez vous assurer que cela n'existe pas dans la première place, cependant.)


1 commentaires

Merci. J'ai effectivement essayé "Echo $ Status" après la commande, mais n'a pas réalisé que c'était "echo $?". Il s'avère que ma version de parallèle n'a pas - joblog, mais "echo \ $?> $ I.res" (s'échapper pour éviter l'interprétation de Perl de $?) Fonctionne comme un charme!



1
votes

Si vous souhaitez éviter l'emballage, vous pouvez envisager:

cat foo | parallel "{} >'{}'.out 2>'{}'.err; echo \$? >'{}'.status"


0 commentaires

4
votes

gnu parallèle 20110722 a la sortie VAL et Signal dans - JOBLOG CODE>:

parallel --joblog /tmp/log false ::: a
cat /tmp/log
Seq     Host    Starttime       Runtime Send    Receive Exitval Signal  Command
1       :       1311332758      0       0       0       1       0       false a


0 commentaires

1
votes

au lieu d'emballage parallèle code>, vous pouvez utiliser l'une des tonnes de modules disponibles à partir de CPAN fournissant des fonctionnalités similaires.

Par exemple: P>

use Proc::Queue size => 10, qw(run_back);

my @pids;

for $i ("date", "ls", "pwd", "factor 17") {
  push @pids, run_back {
    open STDOUT, '>', '/tmp/$i.out';
    open STDERR, '>', '/tmp/$i.err';
    exec $i;
  }
}

for (@pids) {
  1 while waitfor($_, 0) <= 0;
  say "process $_ exit code: ", ($? >> 8);
}


0 commentaires