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);
4 Réponses :
Pour obtenir le statut existant des emplois individuels, Il a une option appelée Notez que parallèle code> 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.
parallèle code>. p>
- joblog {fichier} code> qui produit un rapport avec des codes de sortie. Il accepte
- code> pour le nom de fichier si vous souhaitez que la sortie sur stdout. P>
parallèle code> ne reconnaît pas la mort anormale par signal, donc ceci n'est pas inclus dans le rapport
- JOBLOG code>. 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.) P> p>
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!
Si vous souhaitez éviter l'emballage, vous pouvez envisager:
cat foo | parallel "{} >'{}'.out 2>'{}'.err; echo \$? >'{}'.status"
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
au lieu d'emballage Par exemple: P> parallèle code>, vous pouvez utiliser l'une des tonnes de modules disponibles à partir de CPAN fournissant des fonctionnalités similaires.
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);
}
Retentrés avec perl et code de sortie
@pavel, GNU parallèle, selon le sujet