mirror of
https://git.savannah.gnu.org/git/parallel.git
synced 2024-11-22 14:07:55 +00:00
parallel: Fixed bug #44995: parallel echo {#} ::: 1 2 ::: 1 2.
Passes testsuite.
This commit is contained in:
parent
8110572719
commit
fc0c6cee08
|
@ -226,13 +226,14 @@ New in this release:
|
||||||
|
|
||||||
* <<afventer opdatering>> CIDER: a pipeline for detecting waves of coordinated transcriptional regulation in gene expression time-course data http://biorxiv.org/content/biorxiv/early/2015/03/17/012518.full.pdf
|
* <<afventer opdatering>> CIDER: a pipeline for detecting waves of coordinated transcriptional regulation in gene expression time-course data http://biorxiv.org/content/biorxiv/early/2015/03/17/012518.full.pdf
|
||||||
|
|
||||||
|
|
||||||
* <<afventer opdatering>> GNU Parallel was used (unfortunately without citation) in: MUGBAS: a species free gene-based programme suite for post-GWAS analysis http://www.ncbi.nlm.nih.gov/pubmed/25765345
|
* <<afventer opdatering>> GNU Parallel was used (unfortunately without citation) in: MUGBAS: a species free gene-based programme suite for post-GWAS analysis http://www.ncbi.nlm.nih.gov/pubmed/25765345
|
||||||
|
|
||||||
taxator-tk http://algbio.cs.uni-duesseldorf.de/webapps/wa-download/ (check it)
|
taxator-tk http://algbio.cs.uni-duesseldorf.de/webapps/wa-download/ (check it)
|
||||||
|
|
||||||
* << afventer svar fra Rachel >> GNU Parallel was used in: SISRS: Site Identification from Short Read Sequences https://github.com/rachelss/SISRS/
|
* << afventer svar fra Rachel >> GNU Parallel was used in: SISRS: Site Identification from Short Read Sequences https://github.com/rachelss/SISRS/
|
||||||
|
|
||||||
|
* GNU Parallel was cited in: Toward Enhanced Metadata Quality of Large-Scale Digital Libraries: Estimating Volume Time Range https://www.ideals.illinois.edu/bitstream/handle/2142/73656/186_ready.pdf
|
||||||
|
|
||||||
* GNU Parallel was cited in: Sequencing the cap-snatching repertoire of H1N1 influenza provides insight into the mechanism of viral transcription initiation http://nar.oxfordjournals.org/content/early/2015/04/20/nar.gkv333.full.pdf
|
* GNU Parallel was cited in: Sequencing the cap-snatching repertoire of H1N1 influenza provides insight into the mechanism of viral transcription initiation http://nar.oxfordjournals.org/content/early/2015/04/20/nar.gkv333.full.pdf
|
||||||
|
|
||||||
* GNU Parallel was cited in: Genome assemblyusing Nanopore-guided long and error-free DNA reads http://www.biomedcentral.com/content/pdf/s12864-015-1519-z.pdf
|
* GNU Parallel was cited in: Genome assemblyusing Nanopore-guided long and error-free DNA reads http://www.biomedcentral.com/content/pdf/s12864-015-1519-z.pdf
|
||||||
|
@ -247,6 +248,10 @@ taxator-tk http://algbio.cs.uni-duesseldorf.de/webapps/wa-download/ (check it)
|
||||||
|
|
||||||
* Functions and GNU parallel for effective cluster load management http://genomespot.blogspot.dk/2015/04/functions-and-gnu-parallel-for.html
|
* Functions and GNU parallel for effective cluster load management http://genomespot.blogspot.dk/2015/04/functions-and-gnu-parallel-for.html
|
||||||
|
|
||||||
|
* Use parallel processing to save time importing databases http://drupalsun.com/node/41854
|
||||||
|
|
||||||
|
* Run multiple ssh commands in parallel with GNU Parallel http://www.ameir.net/blog/archives/380-run-multiple-ssh-commands-in-parallel-with-gnu-parallel.html
|
||||||
|
|
||||||
* Bug fixes and man page updates.
|
* Bug fixes and man page updates.
|
||||||
|
|
||||||
GNU Parallel - For people who live life in the parallel lane.
|
GNU Parallel - For people who live life in the parallel lane.
|
||||||
|
|
58
src/parallel
58
src/parallel
|
@ -1053,7 +1053,7 @@ sub parse_options {
|
||||||
|
|
||||||
sub init_globals {
|
sub init_globals {
|
||||||
# Defaults:
|
# Defaults:
|
||||||
$Global::version = 20150424;
|
$Global::version = 20150426;
|
||||||
$Global::progname = 'parallel';
|
$Global::progname = 'parallel';
|
||||||
$Global::infinity = 2**31;
|
$Global::infinity = 2**31;
|
||||||
$Global::debug = 0;
|
$Global::debug = 0;
|
||||||
|
@ -3032,8 +3032,11 @@ sub reaper {
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
my $job = $Global::running{$stiff};
|
my $job = $Global::running{$stiff};
|
||||||
|
|
||||||
# '-a <(seq 10)' will give us a pid not in %Global::running
|
# '-a <(seq 10)' will give us a pid not in %Global::running
|
||||||
$job or next;
|
$job or next;
|
||||||
|
delete $Global::running{$stiff};
|
||||||
|
$Global::total_running--;
|
||||||
$job->set_exitstatus($? >> 8);
|
$job->set_exitstatus($? >> 8);
|
||||||
$job->set_exitsignal($? & 127);
|
$job->set_exitsignal($? & 127);
|
||||||
debug("run", "seq ",$job->seq()," died (", $job->exitstatus(), ")");
|
debug("run", "seq ",$job->seq()," died (", $job->exitstatus(), ")");
|
||||||
|
@ -3042,7 +3045,9 @@ sub reaper {
|
||||||
# The process that died had the tty => release it
|
# The process that died had the tty => release it
|
||||||
$Global::tty_taken = 0;
|
$Global::tty_taken = 0;
|
||||||
}
|
}
|
||||||
|
my $sshlogin = $job->sshlogin();
|
||||||
|
$sshlogin->dec_jobs_running();
|
||||||
|
$sshlogin->inc_jobs_completed();
|
||||||
if(not $job->should_be_retried()) {
|
if(not $job->should_be_retried()) {
|
||||||
# The job is done
|
# The job is done
|
||||||
# Free the jobslot
|
# Free the jobslot
|
||||||
|
@ -3058,14 +3063,9 @@ sub reaper {
|
||||||
}
|
}
|
||||||
if($job->should_we_halt() eq "now") {
|
if($job->should_we_halt() eq "now") {
|
||||||
::killall();
|
::killall();
|
||||||
::wait_and_exit($Global::exitstatus);
|
::wait_and_exit($Global::halt_exitstatus);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
my $sshlogin = $job->sshlogin();
|
|
||||||
$sshlogin->dec_jobs_running();
|
|
||||||
$sshlogin->inc_jobs_completed();
|
|
||||||
$Global::total_running--;
|
|
||||||
delete $Global::running{$stiff};
|
|
||||||
start_more_jobs();
|
start_more_jobs();
|
||||||
if($opt::progress) {
|
if($opt::progress) {
|
||||||
my %progress = progress();
|
my %progress = progress();
|
||||||
|
@ -7490,9 +7490,16 @@ sub set_exitsignal {
|
||||||
$Global::halt_pct <=
|
$Global::halt_pct <=
|
||||||
$Global::total_failed / $Global::total_started
|
$Global::total_failed / $Global::total_started
|
||||||
and $Global::total_failed > 3)) {
|
and $Global::total_failed > 3)) {
|
||||||
# More than N jobs or more than N% failed
|
# At least N jobs had failed
|
||||||
|
# or at least N% had failed and more than 3
|
||||||
|
if($Global::halt_count and $Global::halt_count == 1) {
|
||||||
$Global::halt_exitstatus = $job->exitstatus();
|
$Global::halt_exitstatus = $job->exitstatus();
|
||||||
if($Global::halt_when eq "soon") {
|
} else {
|
||||||
|
$Global::halt_exitstatus = $Global::total_failed;
|
||||||
|
}
|
||||||
|
::debug("halt","Pct: ",$Global::halt_pct,"<=",$Global::total_failed / $Global::total_started," count: ",$Global::halt_count,"\n");
|
||||||
|
if($Global::halt_when eq "soon"
|
||||||
|
and scalar(keys %Global::running) > 0) {
|
||||||
::status
|
::status
|
||||||
("$Global::progname: Starting no more jobs. ",
|
("$Global::progname: Starting no more jobs. ",
|
||||||
"Waiting for ", scalar(keys %Global::running),
|
"Waiting for ", scalar(keys %Global::running),
|
||||||
|
@ -7504,19 +7511,23 @@ sub set_exitsignal {
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if($Global::halt_success) {
|
if($Global::halt_success) {
|
||||||
|
$Global::halt_exitstatus = $Global::total_failed;
|
||||||
::status("$Global::progname: This job succeeded:\n",
|
::status("$Global::progname: This job succeeded:\n",
|
||||||
$job->replaced(),"\n");
|
$job->replaced(),"\n");
|
||||||
if(($Global::halt_count and
|
if(($Global::halt_count and
|
||||||
$Global::halt_count <=
|
$Global::halt_count <=
|
||||||
1+$Global::total_completed-$Global::total_failed)
|
$Global::total_completed-$Global::total_failed)
|
||||||
or
|
or
|
||||||
($Global::halt_pct and
|
($Global::halt_pct and
|
||||||
$Global::halt_pct <=
|
$Global::halt_pct <=
|
||||||
(1+$Global::total_completed-$Global::total_failed)
|
($Global::total_completed-$Global::total_failed)
|
||||||
/ $Global::total_completed
|
/ $Global::total_completed
|
||||||
and ($Global::total_completed-$Global::total_failed) > 3)) {
|
and ($Global::total_completed-$Global::total_failed) > 3)) {
|
||||||
$Global::halt_exitstatus = $job->exitstatus();
|
# At least N jobs had success
|
||||||
if($Global::halt_when eq "soon") {
|
# or at least N% had success and more than 3
|
||||||
|
$Global::halt_exitstatus = 0;
|
||||||
|
if($Global::halt_when eq "soon"
|
||||||
|
and scalar(keys %Global::running) > 0) {
|
||||||
::status
|
::status
|
||||||
("$Global::progname: Starting no more jobs. ",
|
("$Global::progname: Starting no more jobs. ",
|
||||||
"Waiting for ", scalar(keys %Global::running),
|
"Waiting for ", scalar(keys %Global::running),
|
||||||
|
@ -8845,6 +8856,9 @@ sub new {
|
||||||
}, ref($class) || $class;
|
}, ref($class) || $class;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
my %perleval;
|
||||||
|
|
||||||
sub replace {
|
sub replace {
|
||||||
# Calculates the corresponding value for a given perl expression
|
# Calculates the corresponding value for a given perl expression
|
||||||
# Returns:
|
# Returns:
|
||||||
|
@ -8855,8 +8869,7 @@ sub replace {
|
||||||
# This is actually a CommandLine-object,
|
# This is actually a CommandLine-object,
|
||||||
# but it looks nice to be able to say {= $job->slot() =}
|
# but it looks nice to be able to say {= $job->slot() =}
|
||||||
my $job = shift;
|
my $job = shift;
|
||||||
$perlexpr =~ s/^-?\d+ //; # Positional replace treated as normal replace
|
$perlexpr =~ s/^-?\d+ +//; # Positional replace treated as normal replace
|
||||||
if(not defined $self->{"rpl",0,$perlexpr}) {
|
|
||||||
local $_;
|
local $_;
|
||||||
if($Global::trim eq "n") {
|
if($Global::trim eq "n") {
|
||||||
$_ = $self->{'orig'};
|
$_ = $self->{'orig'};
|
||||||
|
@ -8864,10 +8877,10 @@ sub replace {
|
||||||
$_ = trim_of($self->{'orig'});
|
$_ = trim_of($self->{'orig'});
|
||||||
}
|
}
|
||||||
::debug("replace", "eval ", $perlexpr, " ", $_, "\n");
|
::debug("replace", "eval ", $perlexpr, " ", $_, "\n");
|
||||||
if(not $Global::perleval{$perlexpr}) {
|
if(not $perleval{$perlexpr}) {
|
||||||
# Make an anonymous function of the $perlexpr
|
# Make an anonymous function of the $perlexpr
|
||||||
# And more importantly: Compile it only once
|
# And more importantly: Compile it only once
|
||||||
if($Global::perleval{$perlexpr} =
|
if($perleval{$perlexpr} =
|
||||||
eval('sub { no strict; no warnings; my $job = shift; '.
|
eval('sub { no strict; no warnings; my $job = shift; '.
|
||||||
$perlexpr.' }')) {
|
$perlexpr.' }')) {
|
||||||
# All is good
|
# All is good
|
||||||
|
@ -8878,14 +8891,9 @@ sub replace {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
# Execute the function
|
# Execute the function
|
||||||
$Global::perleval{$perlexpr}->($job);
|
$perleval{$perlexpr}->($job);
|
||||||
$self->{"rpl",0,$perlexpr} = $_;
|
return $quote ? ::shell_quote_scalar($_) : $_;
|
||||||
}
|
}
|
||||||
if(not defined $self->{"rpl",$quote,$perlexpr}) {
|
|
||||||
$self->{"rpl",1,$perlexpr} =
|
|
||||||
::shell_quote_scalar($self->{"rpl",0,$perlexpr});
|
|
||||||
}
|
|
||||||
return $self->{"rpl",$quote,$perlexpr};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sub orig {
|
sub orig {
|
||||||
|
|
13
src/sem.pod
13
src/sem.pod
|
@ -161,10 +161,17 @@ available.
|
||||||
pod2html creates two files: pod2htmd.tmp and pod2htmi.tmp which it
|
pod2html creates two files: pod2htmd.tmp and pod2htmi.tmp which it
|
||||||
does not clean up. It uses these two files for a short time. But if
|
does not clean up. It uses these two files for a short time. But if
|
||||||
you run multiple pod2html in parallel (e.g. in a Makefile with make
|
you run multiple pod2html in parallel (e.g. in a Makefile with make
|
||||||
-j) you need to protect pod2html from running twice at the same
|
-j) there is a risk that two different instances of pod2html will
|
||||||
time. B<sem> running as a mutex will do just that:
|
write to the files at the same time:
|
||||||
|
|
||||||
sem --fg --id pod2html pod2html foo.pod > foo.html
|
# This may fail due to shared pod2htmd.tmp/pod2htmi.tmp files
|
||||||
|
pod2html foo.pod --outfile foo.html & pod2html bar.pod --outfile bar.html
|
||||||
|
|
||||||
|
You need to protect pod2html from running twice at the same time.
|
||||||
|
B<sem> running as a mutex will make sure only one runs:
|
||||||
|
|
||||||
|
sem --id pod2html pod2html foo.pod --outfile foo.html
|
||||||
|
sem --id pod2html pod2html bar.pod --outfile bar.html
|
||||||
sem --fg --id pod2html rm -f pod2htmd.tmp pod2htmi.tmp
|
sem --fg --id pod2html rm -f pod2htmd.tmp pod2htmi.tmp
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -14,6 +14,7 @@ echo '**'
|
||||||
echo '### Test --halt-on-error 0';
|
echo '### Test --halt-on-error 0';
|
||||||
(echo "sleep 1;true"; echo "sleep 2;false";echo "sleep 3;true") | parallel -j10 --halt-on-error 0;
|
(echo "sleep 1;true"; echo "sleep 2;false";echo "sleep 3;true") | parallel -j10 --halt-on-error 0;
|
||||||
echo $?;
|
echo $?;
|
||||||
|
|
||||||
(echo "sleep 1;true"; echo "sleep 2;false";echo "sleep 3;true";echo "sleep 4; non_exist") | parallel -j10 --halt 0;
|
(echo "sleep 1;true"; echo "sleep 2;false";echo "sleep 3;true";echo "sleep 4; non_exist") | parallel -j10 --halt 0;
|
||||||
echo $?
|
echo $?
|
||||||
|
|
||||||
|
@ -22,6 +23,7 @@ echo '**'
|
||||||
echo '### Test --halt-on-error 1';
|
echo '### Test --halt-on-error 1';
|
||||||
(echo "sleep 1;true"; echo "sleep 2;false";echo "sleep 3;true") | parallel -j10 --halt-on-error 1;
|
(echo "sleep 1;true"; echo "sleep 2;false";echo "sleep 3;true") | parallel -j10 --halt-on-error 1;
|
||||||
echo $?;
|
echo $?;
|
||||||
|
|
||||||
(echo "sleep 1;true"; echo "sleep 2;false";echo "sleep 3;true";echo "sleep 4; non_exist") | parallel -j10 --halt 1;
|
(echo "sleep 1;true"; echo "sleep 2;false";echo "sleep 3;true";echo "sleep 4; non_exist") | parallel -j10 --halt 1;
|
||||||
echo $?
|
echo $?
|
||||||
|
|
||||||
|
@ -30,6 +32,7 @@ echo '**'
|
||||||
echo '### Test --halt-on-error 2';
|
echo '### Test --halt-on-error 2';
|
||||||
(echo "sleep 1;true"; echo "sleep 2;false";echo "sleep 3;true") | parallel -j10 --halt-on-error 2;
|
(echo "sleep 1;true"; echo "sleep 2;false";echo "sleep 3;true") | parallel -j10 --halt-on-error 2;
|
||||||
echo $?;
|
echo $?;
|
||||||
|
|
||||||
(echo "sleep 1;true"; echo "sleep 2;false";echo "sleep 3;true";echo "sleep 4; non_exist") | parallel -j10 --halt 2;
|
(echo "sleep 1;true"; echo "sleep 2;false";echo "sleep 3;true";echo "sleep 4; non_exist") | parallel -j10 --halt 2;
|
||||||
echo $?
|
echo $?
|
||||||
|
|
||||||
|
@ -38,6 +41,7 @@ echo '**'
|
||||||
echo '### Test --halt -1';
|
echo '### Test --halt -1';
|
||||||
(echo "sleep 1;false"; echo "sleep 2;true";echo "sleep 3;false") | parallel -j10 --halt-on-error -1;
|
(echo "sleep 1;false"; echo "sleep 2;true";echo "sleep 3;false") | parallel -j10 --halt-on-error -1;
|
||||||
echo $?;
|
echo $?;
|
||||||
|
|
||||||
(echo "sleep 1;false"; echo "sleep 2;true";echo "sleep 3;false";echo "sleep 4; non_exist") | parallel -j10 --halt -1;
|
(echo "sleep 1;false"; echo "sleep 2;true";echo "sleep 3;false";echo "sleep 4; non_exist") | parallel -j10 --halt -1;
|
||||||
echo $?
|
echo $?
|
||||||
|
|
||||||
|
@ -46,6 +50,7 @@ echo '**'
|
||||||
echo '### Test --halt -2';
|
echo '### Test --halt -2';
|
||||||
(echo "sleep 1;false"; echo "sleep 2;true";echo "sleep 3;false") | parallel -j10 --halt-on-error -2;
|
(echo "sleep 1;false"; echo "sleep 2;true";echo "sleep 3;false") | parallel -j10 --halt-on-error -2;
|
||||||
echo $?;
|
echo $?;
|
||||||
|
|
||||||
(echo "sleep 1;false"; echo "sleep 2;true";echo "sleep 3;false";echo "sleep 4; non_exist") | parallel -j10 --halt -2;
|
(echo "sleep 1;false"; echo "sleep 2;true";echo "sleep 3;false";echo "sleep 4; non_exist") | parallel -j10 --halt -2;
|
||||||
echo $?
|
echo $?
|
||||||
|
|
||||||
|
|
|
@ -19,12 +19,13 @@ echo '### Test --halt-on-error 1'; (echo "sleep 1;true"; echo "sleep 2;false";
|
||||||
127
|
127
|
||||||
parallel: This job failed:
|
parallel: This job failed:
|
||||||
sleep 2;false
|
sleep 2;false
|
||||||
parallel: Starting no more jobs. Waiting for 3 jobs to finish. This job failed:
|
parallel: Starting no more jobs. Waiting for 1 jobs to finish.
|
||||||
|
parallel: This job failed:
|
||||||
sleep 2;false
|
sleep 2;false
|
||||||
|
parallel: Starting no more jobs. Waiting for 2 jobs to finish.
|
||||||
/bin/bash: non_exist: command not found
|
/bin/bash: non_exist: command not found
|
||||||
parallel: This job failed:
|
parallel: This job failed:
|
||||||
sleep 4; non_exist
|
sleep 4; non_exist
|
||||||
parallel: Starting no more jobs. Waiting for 1 jobs to finish.
|
|
||||||
echo '**'
|
echo '**'
|
||||||
**
|
**
|
||||||
echo '### Test --halt-on-error 2'; (echo "sleep 1;true"; echo "sleep 2;false";echo "sleep 3;true") | parallel -j10 --halt-on-error 2; echo $?; (echo "sleep 1;true"; echo "sleep 2;false";echo "sleep 3;true";echo "sleep 4; non_exist") | parallel -j10 --halt 2; echo $?
|
echo '### Test --halt-on-error 2'; (echo "sleep 1;true"; echo "sleep 2;false";echo "sleep 3;true") | parallel -j10 --halt-on-error 2; echo $?; (echo "sleep 1;true"; echo "sleep 2;false";echo "sleep 3;true";echo "sleep 4; non_exist") | parallel -j10 --halt 2; echo $?
|
||||||
|
@ -43,9 +44,10 @@ echo '### Test --halt -1'; (echo "sleep 1;false"; echo "sleep 2;true";echo "sl
|
||||||
0
|
0
|
||||||
parallel: This job succeeded:
|
parallel: This job succeeded:
|
||||||
sleep 2;true
|
sleep 2;true
|
||||||
parallel: Starting no more jobs. Waiting for 3 jobs to finish. This job succeeded:
|
parallel: Starting no more jobs. Waiting for 1 jobs to finish.
|
||||||
|
parallel: This job succeeded:
|
||||||
sleep 2;true
|
sleep 2;true
|
||||||
parallel: Starting no more jobs. Waiting for 3 jobs to finish.
|
parallel: Starting no more jobs. Waiting for 2 jobs to finish.
|
||||||
/bin/bash: non_exist: command not found
|
/bin/bash: non_exist: command not found
|
||||||
echo '**'
|
echo '**'
|
||||||
**
|
**
|
||||||
|
@ -66,40 +68,39 @@ exit code 9
|
||||||
1
|
1
|
||||||
parallel: This job failed:
|
parallel: This job failed:
|
||||||
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ shift 1
|
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ shift 1
|
||||||
parallel: Starting no more jobs. Waiting for 9 jobs to finish.
|
parallel: Starting no more jobs. Waiting for 8 jobs to finish.
|
||||||
2
|
2
|
||||||
parallel: This job failed:
|
parallel: This job failed:
|
||||||
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ shift 2
|
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ shift 2
|
||||||
parallel: Starting no more jobs. Waiting for 8 jobs to finish.
|
parallel: Starting no more jobs. Waiting for 7 jobs to finish.
|
||||||
3
|
3
|
||||||
parallel: This job failed:
|
parallel: This job failed:
|
||||||
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ shift 3
|
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ shift 3
|
||||||
parallel: Starting no more jobs. Waiting for 7 jobs to finish.
|
parallel: Starting no more jobs. Waiting for 6 jobs to finish.
|
||||||
4
|
4
|
||||||
parallel: This job failed:
|
parallel: This job failed:
|
||||||
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ shift 4
|
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ shift 4
|
||||||
parallel: Starting no more jobs. Waiting for 6 jobs to finish.
|
parallel: Starting no more jobs. Waiting for 5 jobs to finish.
|
||||||
5
|
5
|
||||||
parallel: This job failed:
|
parallel: This job failed:
|
||||||
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ shift 5
|
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ shift 5
|
||||||
parallel: Starting no more jobs. Waiting for 5 jobs to finish.
|
parallel: Starting no more jobs. Waiting for 4 jobs to finish.
|
||||||
6
|
6
|
||||||
parallel: This job failed:
|
parallel: This job failed:
|
||||||
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ shift 6
|
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ shift 6
|
||||||
parallel: Starting no more jobs. Waiting for 4 jobs to finish.
|
parallel: Starting no more jobs. Waiting for 3 jobs to finish.
|
||||||
7
|
7
|
||||||
parallel: This job failed:
|
parallel: This job failed:
|
||||||
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ shift 7
|
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ shift 7
|
||||||
parallel: Starting no more jobs. Waiting for 3 jobs to finish.
|
parallel: Starting no more jobs. Waiting for 2 jobs to finish.
|
||||||
8
|
8
|
||||||
0
|
0
|
||||||
parallel: This job failed:
|
parallel: This job failed:
|
||||||
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ shift 8
|
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ shift 8
|
||||||
parallel: Starting no more jobs. Waiting for 2 jobs to finish.
|
parallel: Starting no more jobs. Waiting for 1 jobs to finish.
|
||||||
9
|
9
|
||||||
parallel: This job failed:
|
parallel: This job failed:
|
||||||
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ shift 9
|
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ shift 9
|
||||||
parallel: Starting no more jobs. Waiting for 1 jobs to finish.
|
|
||||||
echo '### Test last dying print --halt-on-error 2'; (seq 0 8;echo 0; echo 9) | parallel -j10 -kq --halt 2 perl -e 'sleep $ARGV[0];print STDERR @ARGV,"\n"; exit shift'; echo exit code $?
|
echo '### Test last dying print --halt-on-error 2'; (seq 0 8;echo 0; echo 9) | parallel -j10 -kq --halt 2 perl -e 'sleep $ARGV[0];print STDERR @ARGV,"\n"; exit shift'; echo exit code $?
|
||||||
### Test last dying print --halt-on-error 2
|
### Test last dying print --halt-on-error 2
|
||||||
exit code 1
|
exit code 1
|
||||||
|
@ -114,40 +115,39 @@ exit code 0
|
||||||
1
|
1
|
||||||
parallel: This job succeeded:
|
parallel: This job succeeded:
|
||||||
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ not\ shift 1
|
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ not\ shift 1
|
||||||
parallel: Starting no more jobs. Waiting for 9 jobs to finish.
|
parallel: Starting no more jobs. Waiting for 8 jobs to finish.
|
||||||
2
|
2
|
||||||
parallel: This job succeeded:
|
parallel: This job succeeded:
|
||||||
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ not\ shift 2
|
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ not\ shift 2
|
||||||
parallel: Starting no more jobs. Waiting for 8 jobs to finish.
|
parallel: Starting no more jobs. Waiting for 7 jobs to finish.
|
||||||
3
|
3
|
||||||
parallel: This job succeeded:
|
parallel: This job succeeded:
|
||||||
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ not\ shift 3
|
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ not\ shift 3
|
||||||
parallel: Starting no more jobs. Waiting for 7 jobs to finish.
|
parallel: Starting no more jobs. Waiting for 6 jobs to finish.
|
||||||
4
|
4
|
||||||
parallel: This job succeeded:
|
parallel: This job succeeded:
|
||||||
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ not\ shift 4
|
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ not\ shift 4
|
||||||
parallel: Starting no more jobs. Waiting for 6 jobs to finish.
|
parallel: Starting no more jobs. Waiting for 5 jobs to finish.
|
||||||
5
|
5
|
||||||
parallel: This job succeeded:
|
parallel: This job succeeded:
|
||||||
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ not\ shift 5
|
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ not\ shift 5
|
||||||
parallel: Starting no more jobs. Waiting for 5 jobs to finish.
|
parallel: Starting no more jobs. Waiting for 4 jobs to finish.
|
||||||
6
|
6
|
||||||
parallel: This job succeeded:
|
parallel: This job succeeded:
|
||||||
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ not\ shift 6
|
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ not\ shift 6
|
||||||
parallel: Starting no more jobs. Waiting for 4 jobs to finish.
|
parallel: Starting no more jobs. Waiting for 3 jobs to finish.
|
||||||
7
|
7
|
||||||
parallel: This job succeeded:
|
parallel: This job succeeded:
|
||||||
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ not\ shift 7
|
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ not\ shift 7
|
||||||
parallel: Starting no more jobs. Waiting for 3 jobs to finish.
|
parallel: Starting no more jobs. Waiting for 2 jobs to finish.
|
||||||
8
|
8
|
||||||
0
|
0
|
||||||
parallel: This job succeeded:
|
parallel: This job succeeded:
|
||||||
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ not\ shift 8
|
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ not\ shift 8
|
||||||
parallel: Starting no more jobs. Waiting for 2 jobs to finish.
|
parallel: Starting no more jobs. Waiting for 1 jobs to finish.
|
||||||
9
|
9
|
||||||
parallel: This job succeeded:
|
parallel: This job succeeded:
|
||||||
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ not\ shift 9
|
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ not\ shift 9
|
||||||
parallel: Starting no more jobs. Waiting for 1 jobs to finish.
|
|
||||||
echo '### Test last dying print --halt-on-error -2'; (seq 0 8;echo 0; echo 9) | parallel -j10 -kq --halt -2 perl -e 'sleep $ARGV[0];print STDERR @ARGV,"\n"; exit not shift'; echo exit code $?
|
echo '### Test last dying print --halt-on-error -2'; (seq 0 8;echo 0; echo 9) | parallel -j10 -kq --halt -2 perl -e 'sleep $ARGV[0];print STDERR @ARGV,"\n"; exit not shift'; echo exit code $?
|
||||||
### Test last dying print --halt-on-error -2
|
### Test last dying print --halt-on-error -2
|
||||||
exit code 0
|
exit code 0
|
||||||
|
|
|
@ -478,9 +478,10 @@ Seq Host Starttime JobRuntime Send Receive Exitval Signal Command
|
||||||
0
|
0
|
||||||
1
|
1
|
||||||
2
|
2
|
||||||
parallel: Starting no more jobs. Waiting for 2 jobs to finish. This job failed:
|
parallel: This job failed:
|
||||||
echo 1; exit 1
|
echo 1; exit 1
|
||||||
parallel: Starting no more jobs. Waiting for 1 jobs to finish. This job failed:
|
parallel: Starting no more jobs. Waiting for 1 jobs to finish.
|
||||||
|
parallel: This job failed:
|
||||||
echo 2; exit 2
|
echo 2; exit 2
|
||||||
parallel -j2 --halt 2 echo {}\; exit {} ::: 0 0 1 2 3
|
parallel -j2 --halt 2 echo {}\; exit {} ::: 0 0 1 2 3
|
||||||
0
|
0
|
||||||
|
@ -496,9 +497,16 @@ echo 1; exit 1
|
||||||
3
|
3
|
||||||
4
|
4
|
||||||
5
|
5
|
||||||
parallel: Starting no more jobs. Waiting for 2 jobs to finish. This job failed:
|
parallel: This job failed:
|
||||||
|
echo 1; exit 1
|
||||||
|
parallel: This job failed:
|
||||||
|
echo 2; exit 2
|
||||||
|
parallel: This job failed:
|
||||||
|
echo 3; exit 3
|
||||||
|
parallel: This job failed:
|
||||||
echo 4; exit 4
|
echo 4; exit 4
|
||||||
parallel: Starting no more jobs. Waiting for 1 jobs to finish. This job failed:
|
parallel: Starting no more jobs. Waiting for 1 jobs to finish.
|
||||||
|
parallel: This job failed:
|
||||||
echo 5; exit 5
|
echo 5; exit 5
|
||||||
parallel -k --retries 3 'echo tried {} >>/tmp/runs; echo completed {}; exit {}' ::: 1 2 0
|
parallel -k --retries 3 'echo tried {} >>/tmp/runs; echo completed {}; exit {}' ::: 1 2 0
|
||||||
cat /tmp/runs
|
cat /tmp/runs
|
||||||
|
@ -931,7 +939,7 @@ This helps funding further development; and it won't cost you a cent.
|
||||||
If you pay 10000 EUR you should feel free to use GNU Parallel without citing.
|
If you pay 10000 EUR you should feel free to use GNU Parallel without citing.
|
||||||
|
|
||||||
parallel --version
|
parallel --version
|
||||||
GNU parallel 20150422
|
GNU parallel 20150426
|
||||||
Copyright (C) 2007,2008,2009,2010,2011,2012,2013,2014,2015 Ole Tange
|
Copyright (C) 2007,2008,2009,2010,2011,2012,2013,2014,2015 Ole Tange
|
||||||
and Free Software Foundation, Inc.
|
and Free Software Foundation, Inc.
|
||||||
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
|
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
|
||||||
|
@ -943,7 +951,7 @@ Web site: http://www.gnu.org/software/parallel
|
||||||
When using programs that use GNU Parallel to process data for publication
|
When using programs that use GNU Parallel to process data for publication
|
||||||
please cite as described in 'parallel --bibtex'.
|
please cite as described in 'parallel --bibtex'.
|
||||||
parallel --minversion 20130722 && echo Your version is at least 20130722.
|
parallel --minversion 20130722 && echo Your version is at least 20130722.
|
||||||
20150422
|
20150426
|
||||||
Your version is at least 20130722.
|
Your version is at least 20130722.
|
||||||
parallel --bibtex
|
parallel --bibtex
|
||||||
Academic tradition requires you to cite works you base your article on.
|
Academic tradition requires you to cite works you base your article on.
|
||||||
|
@ -989,4 +997,4 @@ C
|
||||||
\nice -n17 /bin/bash -c echo\ A
|
\nice -n17 /bin/bash -c echo\ A
|
||||||
\nice -n17 /bin/bash -c echo\ B
|
\nice -n17 /bin/bash -c echo\ B
|
||||||
\nice -n17 /bin/bash -c echo\ C
|
\nice -n17 /bin/bash -c echo\ C
|
||||||
7
|
6
|
||||||
|
|
Loading…
Reference in a new issue