Чтобы получить существующий статус отдельных заданий, parallel
необходимо будет где-то записать информацию.Я не знаю, так ли это или нет.Если этого не произойдет, вы можете сделать это самостоятельно.
my %jobs = (
"date" => "date",
"ls" => "ls",
"pwd" => "pwd",
"factor" => "factor 17",
);
open(my $parallel, "|parallel");
for my $id (keys(%jobs)) {
print $parallel
$jobs{$id}
." 1> '/tmp/$id.out'"
." 2> '/tmp/$id.err' ; "
."echo \$?"
." > '/tmp/$id.exit'\n";
}
close($parallel);
my $exit_status = $? >> 8;
if ($exit_status >= 255) {
print("Failed\n");
} else {
printf("%d failed jobs\n", $exit_status);
}
for my $id (keys(%jobs)) {
...grab output and exit code from files...
}
Обновление : Я пошел и установил parallel
.
У него есть опцияназывается --joblog {file}
, который создает отчет с кодами выхода.Он принимает -
для имени файла, если вы хотите, чтобы он выводился в STDOUT.
Обратите внимание, что parallel
не распознает аварийную смерть по сигналу, поэтому он не включен в отчет --joblog
.Используя решение, которое я разместил выше, отсутствующий файл .exit будет указывать на ненормальную смерть.(Вы должны убедиться, что он вообще не существует.)