From 78d14e0e40bea6879f01310a2532e046b56d31f5 Mon Sep 17 00:00:00 2001 From: Ole Tange Date: Sun, 5 May 2024 19:06:38 +0200 Subject: [PATCH] parallel: --memfree kills do not count as --retries. --- Makefile.am | 14 +- Makefile.in | 13 +- src/parallel | 56 +- testsuite/Makefile | 2 +- testsuite/tests-to-run/parallel-local-0.3s.sh | 4 +- testsuite/tests-to-run/parallel-local-10s.sh | 3 +- testsuite/tests-to-run/parallel-local-300s.sh | 6 +- testsuite/tests-to-run/parallel-local-ssh1.sh | 1 + testsuite/wanted-results/parallel-local-300s | 606 +++++++++--------- 9 files changed, 375 insertions(+), 330 deletions(-) diff --git a/Makefile.am b/Makefile.am index 51197106..4a6daa89 100644 --- a/Makefile.am +++ b/Makefile.am @@ -8,11 +8,19 @@ test: cd testsuite; make 1 tortest: - torsocks ssh -t cn6kfd6pfck5kosywnuf33zvje2ifmelrz656rhzqjkpd77ib4sbzzad.onion 'cd privat/parallel/testsuite/ && make short && make long && make mem' + torsocks ssh -t tortest 'export SSH_AUTH_SOCK=`cat ~/.ssh/SSH_AUTH_SOCK`;\ + export SSH_AGENT_PID=`cat ~/.ssh/SSH_AGENT_PID`;\ + cd privat/parallel/testsuite/ &&\ + make short && make long && make mem' + make torresults + +torresults: + torsocks rsync -Hazv --progress --exclude authorized_keys --exclude .vagrant/ tortest:privat/parallel/testsuite/actual-results/ testsuite/actual-results/ + torsync: - torsocks rsync -Hazv --exclude authorized_keys --exclude .vagrant/ ./ cn6kfd6pfck5kosywnuf33zvje2ifmelrz656rhzqjkpd77ib4sbzzad.onion:privat/parallel/ - torsocks ssh -t cn6kfd6pfck5kosywnuf33zvje2ifmelrz656rhzqjkpd77ib4sbzzad.onion 'cd privat/parallel/testsuite/ && make prereqlocal' + torsocks rsync -Hazv --progress --exclude authorized_keys --exclude .vagrant/ ./ tortest:privat/parallel/ + make tortest web: cd src; make web diff --git a/Makefile.in b/Makefile.in index a5deca55..341856ef 100644 --- a/Makefile.in +++ b/Makefile.in @@ -777,11 +777,18 @@ test: cd testsuite; make 1 tortest: - torsocks ssh -t cn6kfd6pfck5kosywnuf33zvje2ifmelrz656rhzqjkpd77ib4sbzzad.onion 'cd privat/parallel/testsuite/ && make short && make long && make mem' + torsocks ssh -t tortest 'export SSH_AUTH_SOCK=`cat ~/.ssh/SSH_AUTH_SOCK`;\ + export SSH_AGENT_PID=`cat ~/.ssh/SSH_AGENT_PID`;\ + cd privat/parallel/testsuite/ &&\ + make short && make long && make mem' + make torresults + +torresults: + torsocks rsync -Hazv --progress --exclude authorized_keys --exclude .vagrant/ tortest:privat/parallel/testsuite/actual-results/ testsuite/actual-results/ torsync: - torsocks rsync -Hazv --exclude authorized_keys --exclude .vagrant/ ./ cn6kfd6pfck5kosywnuf33zvje2ifmelrz656rhzqjkpd77ib4sbzzad.onion:privat/parallel/ - torsocks ssh -t cn6kfd6pfck5kosywnuf33zvje2ifmelrz656rhzqjkpd77ib4sbzzad.onion 'cd privat/parallel/testsuite/ && make prereqlocal' + torsocks rsync -Hazv --progress --exclude authorized_keys --exclude .vagrant/ ./ tortest:privat/parallel/ + make tortest web: cd src; make web diff --git a/src/parallel b/src/parallel index 51a5c0c5..5f6960e9 100755 --- a/src/parallel +++ b/src/parallel @@ -5727,15 +5727,20 @@ sub kill_sleep_seq(@) { # Send jobs TERM,TERM,KILL to processgroups # Input: # @pids = list of pids that are also processgroups - # Convert pids to process groups ($processgroup = -$pid) - my @pgrps = map { -$_ } @_; - my @term_seq = split/,/,$opt::termseq; - if(not @term_seq) { - @term_seq = ("TERM",200,"TERM",100,"TERM",50,"KILL",25); - } - # for each signal+waittime: kill process groups still not dead - while(@term_seq) { - @pgrps = kill_sleep(shift @term_seq, shift @term_seq, @pgrps); + # Killing can be slow if you follow @term_seq + # So run the killing in parallel + if(not fork()) { + # Convert pids to process groups ($processgroup = -$pid) + my @pgrps = map { -$_ } @_; + my @term_seq = split/,/,$opt::termseq; + if(not @term_seq) { + @term_seq = ("TERM",200,"TERM",100,"TERM",50,"KILL",25); + } + # for each signal+waittime: kill process groups still not dead + while(@term_seq) { + @pgrps = kill_sleep(shift @term_seq, shift @term_seq, @pgrps); + } + exit(0); } } @@ -7140,6 +7145,7 @@ sub kill_youngster_if_not_enough_mem() { ::debug("mem","\n", $job->seq(), "killed ", $sshlogin->memfree()," < ",$limit); $job->kill(); + $job->set_killreason("mem"); $sshlogin->memfree_recompute(); } else { last; @@ -9964,6 +9970,16 @@ sub kill($) { ::kill_sleep_seq($self->pid()); } +sub killreason($) { + my $self = shift; + return $self->{'killreason'}; +} + +sub set_killreason($) { + my $self = shift; + $self->{'killreason'} = shift; +} + sub suspend($) { my $self = shift; my @pgrps = map { -$_ } $self->pid(); @@ -11298,12 +11314,28 @@ sub set_job_in_joblog($) { vec($Global::job_already_run,$job->seq(),1) = 1; } + sub retry() { + # This command should be retried + my $self = shift; + + $self->set_endtime(undef); + $self->reset_exitstatus(); + $self->set_killreason(undef); + $Global::JobQueue->unget($self); + ::debug("run", "Retry ", $self->seq(), "\n"); + return 1; + } + sub should_be_retried($) { # Should this job be retried? # Returns # 0 - do not retry # 1 - job queued for retry my $self = shift; + if(0 and $opt::memfree and $self->killreason() eq "mem") { + # Job was killed due to memfree => retry + return $self->retry(); + } if (not defined $opt::retries) { return 0; } if(not $self->exitstatus() and not $self->exitsignal()) { # Completed with success. If there is a recorded failure: forget it @@ -11324,11 +11356,7 @@ sub should_be_retried($) { return 0; } else { # This command should be retried - $self->set_endtime(undef); - $self->reset_exitstatus(); - $Global::JobQueue->unget($self); - ::debug("run", "Retry ", $self->seq(), "\n"); - return 1; + return $self->retry(); } } } diff --git a/testsuite/Makefile b/testsuite/Makefile index ac88b07b..35136d00 100644 --- a/testsuite/Makefile +++ b/testsuite/Makefile @@ -116,7 +116,7 @@ start=(stdout ping -w 1 -c 1 {} && ssh vagrant@{} echo ssh {} works || \ (cat ../../authorized_keys | vagrant ssh -c "cat >>.ssh/authorized_keys"; \ vagrant ssh -c "sudo /sbin/ifconfig eth1 172.27.27.3"); \ ssh-keygen -R {}; \ - stdout wssh -oStrictHostKeyChecking=accept-new vagrant@{} echo {} is up) ) | \ + stdout wssh -oStrictHostKeyChecking=accept-new vagrant@{} echo ssh {} started and works) ) | \ grep -Ev "${ignore}" stop=(stdout ping -w 1 -c 1 {} && \ diff --git a/testsuite/tests-to-run/parallel-local-0.3s.sh b/testsuite/tests-to-run/parallel-local-0.3s.sh index 19e24548..32338d22 100644 --- a/testsuite/tests-to-run/parallel-local-0.3s.sh +++ b/testsuite/tests-to-run/parallel-local-0.3s.sh @@ -419,8 +419,8 @@ par_disk_full() { ) >/dev/null 2>/dev/null cat /dev/zero >$SMALLDISK/out - parallel --tmpdir $SMALLDISK echo ::: OK - + stdout parallel --tmpdir $SMALLDISK echo ::: OK | + grep -v 'Warning: unable to close filehandle.* No space left on device' rm $SMALLDISK/out sudo umount -l /tmp/smalldisk.img diff --git a/testsuite/tests-to-run/parallel-local-10s.sh b/testsuite/tests-to-run/parallel-local-10s.sh index d604ca4b..7bd9b0b1 100644 --- a/testsuite/tests-to-run/parallel-local-10s.sh +++ b/testsuite/tests-to-run/parallel-local-10s.sh @@ -591,7 +591,8 @@ par_tmp_full() { sudo mount -t tmpfs -o size=10% none $SHM echo "### Test --tmpdir running full. bug #40733 was caused by this" - stdout parallel -j1 --tmpdir $SHM cat /dev/zero ::: dummy + stdout parallel -j1 --tmpdir $SHM cat /dev/zero ::: dummy | + grep -v 'Warning:.*No space left on device during global destruction' } par_jobs_file() { diff --git a/testsuite/tests-to-run/parallel-local-300s.sh b/testsuite/tests-to-run/parallel-local-300s.sh index 9ba675b8..23688fc1 100644 --- a/testsuite/tests-to-run/parallel-local-300s.sh +++ b/testsuite/tests-to-run/parallel-local-300s.sh @@ -110,7 +110,7 @@ par_over_4GB() { nice md5sum } -par_mem_leak() { +par__mem_leak() { echo "### test for mem leak" export parallel=parallel @@ -161,7 +161,7 @@ par_mem_leak() { fi } -par_halt_on_error() { +par_xhalt_on_error() { mytest() { HALT=$1 BOOL1=$2 @@ -183,7 +183,7 @@ par_halt_on_error() { parallel -j1 -k --tag mytest ::: -2 -1 0 1 2 ::: true false ::: true false } -par_test_build_and_install() { +par__test_build_and_install() { cd ~/privat/parallel # Make a .tar.gz file stdout make dist | diff --git a/testsuite/tests-to-run/parallel-local-ssh1.sh b/testsuite/tests-to-run/parallel-local-ssh1.sh index 7aba71a7..f5a8f511 100644 --- a/testsuite/tests-to-run/parallel-local-ssh1.sh +++ b/testsuite/tests-to-run/parallel-local-ssh1.sh @@ -28,6 +28,7 @@ par_sshlogin_with_comma() { par_sshpass_with_password() { echo '### sshpass' + . ~/.passwords echo OK | parallel -S "sshpass -p $withpassword ssh withpassword@lo:22" echo echo OK | parallel -S withpassword:"$withpassword"@lo:22 echo export SSHPASS="$withpassword" diff --git a/testsuite/wanted-results/parallel-local-300s b/testsuite/wanted-results/parallel-local-300s index 4080ba8e..880edbb5 100644 --- a/testsuite/wanted-results/parallel-local-300s +++ b/testsuite/wanted-results/parallel-local-300s @@ -1,308 +1,5 @@ -par_compare_exit_codes ### compare the exit codes -par_compare_exit_codes directly from shells, shells called from parallel, -par_compare_exit_codes killed with different signals -par_compare_exit_codes sig=joblog_sig shell=parallel=joblog -par_compare_exit_codes par_compare_exit_codes -par_compare_exit_codes csh sig 2=0 130=1=1 -par_compare_exit_codes posh sig 34=11 162=139=139 -par_compare_exit_codes posh sig 35=11 163=139=139 -par_compare_exit_codes posh sig 36=11 164=139=139 -par_compare_exit_codes posh sig 37=11 165=139=139 -par_compare_exit_codes posh sig 38=11 166=139=139 -par_compare_exit_codes posh sig 39=11 167=139=139 -par_compare_exit_codes posh sig 40=11 168=139=139 -par_compare_exit_codes posh sig 41=11 169=139=139 -par_compare_exit_codes posh sig 42=11 170=139=139 -par_compare_exit_codes posh sig 43=11 171=139=139 -par_compare_exit_codes posh sig 44=11 172=139=139 -par_compare_exit_codes posh sig 45=11 173=139=139 -par_compare_exit_codes posh sig 46=11 174=139=139 -par_compare_exit_codes posh sig 47=11 175=139=139 -par_compare_exit_codes posh sig 48=11 176=139=139 -par_compare_exit_codes posh sig 49=11 177=139=139 -par_compare_exit_codes posh sig 50=11 178=139=139 -par_compare_exit_codes posh sig 51=11 179=139=139 -par_compare_exit_codes posh sig 52=11 180=139=139 -par_compare_exit_codes posh sig 53=11 181=139=139 -par_compare_exit_codes posh sig 54=11 182=139=139 -par_compare_exit_codes posh sig 55=11 183=139=139 -par_compare_exit_codes posh sig 56=11 184=139=139 -par_compare_exit_codes posh sig 57=11 185=139=139 -par_compare_exit_codes posh sig 58=11 186=139=139 -par_compare_exit_codes posh sig 59=11 187=139=139 -par_compare_exit_codes posh sig 60=11 188=139=139 -par_compare_exit_codes posh sig 61=11 189=139=139 -par_compare_exit_codes posh sig 62=11 190=139=139 -par_compare_exit_codes posh sig 63=11 191=139=139 -par_compare_exit_codes posh sig 64=11 192=139=139 -par_compare_exit_codes par_compare_exit_codes -par_compare_exit_codes tcsh sig 2=0 130=1=1 -par_compare_exit_codes fdsh sig 2=0 0=2=2 -par_compare_exit_codes fdsh exit 130=0 130=2=2 -par_compare_exit_codes fdsh sig 9=0 137=2=2 -par_compare_exit_codes fdsh exit 137=0 137=2=2 -par_compare_exit_codes fdsh sig 10=0 0=2=2 -par_compare_exit_codes fdsh exit 138=0 138=2=2 -par_compare_exit_codes fdsh sig 11=0 0=2=2 -par_compare_exit_codes fdsh exit 139=0 139=2=2 -par_compare_exit_codes fdsh sig 12=0 0=2=2 -par_compare_exit_codes fdsh exit 140=0 140=2=2 -par_compare_exit_codes fdsh sig 15=0 0=2=2 -par_compare_exit_codes fdsh exit 143=0 143=2=2 -par_compare_exit_codes fdsh sig 16=0 144=2=2 -par_compare_exit_codes fdsh exit 144=0 144=2=2 -par_compare_exit_codes fdsh sig 17=0 0=2=2 -par_compare_exit_codes fdsh exit 145=0 145=2=2 -par_compare_exit_codes fdsh sig 18=0 0=2=2 -par_compare_exit_codes fdsh exit 146=0 146=2=2 -par_compare_exit_codes fdsh sig 20=0 0=2=2 -par_compare_exit_codes fdsh exit 148=0 148=2=2 -par_compare_exit_codes fdsh sig 21=0 0=2=2 -par_compare_exit_codes fdsh exit 149=0 149=2=2 -par_compare_exit_codes fdsh sig 22=0 0=2=2 -par_compare_exit_codes fdsh exit 150=0 150=2=2 -par_compare_exit_codes fdsh sig 23=0 0=2=2 -par_compare_exit_codes fdsh exit 151=0 151=2=2 -par_compare_exit_codes fdsh sig 26=0 154=2=2 -par_compare_exit_codes fdsh exit 154=0 154=2=2 -par_compare_exit_codes fdsh sig 27=0 155=2=2 -par_compare_exit_codes fdsh exit 155=0 155=2=2 -par_compare_exit_codes fdsh sig 29=0 157=2=2 -par_compare_exit_codes fdsh exit 157=0 157=2=2 -par_compare_exit_codes fdsh sig 30=0 158=2=2 -par_compare_exit_codes fdsh exit 158=0 158=2=2 -par_compare_exit_codes fdsh sig 32=0 0=2=2 -par_compare_exit_codes fdsh exit 160=0 160=2=2 -par_compare_exit_codes fdsh sig 33=0 0=2=2 -par_compare_exit_codes fdsh exit 161=0 161=2=2 -par_compare_exit_codes fdsh sig 35=0 163=2=2 -par_compare_exit_codes fdsh exit 163=0 163=2=2 -par_compare_exit_codes fdsh sig 36=0 164=2=2 -par_compare_exit_codes fdsh exit 164=0 164=2=2 -par_compare_exit_codes fdsh sig 37=0 165=2=2 -par_compare_exit_codes fdsh exit 165=0 165=2=2 -par_compare_exit_codes fdsh sig 38=0 166=2=2 -par_compare_exit_codes fdsh exit 166=0 166=2=2 -par_compare_exit_codes fdsh sig 39=0 167=2=2 -par_compare_exit_codes fdsh exit 167=0 167=2=2 -par_compare_exit_codes fdsh sig 40=0 168=2=2 -par_compare_exit_codes fdsh exit 168=0 168=2=2 -par_compare_exit_codes fdsh sig 41=0 169=2=2 -par_compare_exit_codes fdsh exit 169=0 169=2=2 -par_compare_exit_codes fdsh sig 42=0 170=2=2 -par_compare_exit_codes fdsh exit 170=0 170=2=2 -par_compare_exit_codes fdsh sig 43=0 171=2=2 -par_compare_exit_codes fdsh exit 171=0 171=2=2 -par_compare_exit_codes fdsh sig 45=0 173=2=2 -par_compare_exit_codes fdsh exit 173=0 173=2=2 -par_compare_exit_codes fdsh sig 46=0 174=2=2 -par_compare_exit_codes fdsh exit 174=0 174=2=2 -par_compare_exit_codes fdsh sig 47=0 175=2=2 -par_compare_exit_codes fdsh exit 175=0 175=2=2 -par_compare_exit_codes fdsh sig 48=0 176=2=2 -par_compare_exit_codes fdsh exit 176=0 176=2=2 -par_compare_exit_codes fdsh sig 49=0 177=2=2 -par_compare_exit_codes fdsh exit 177=0 177=2=2 -par_compare_exit_codes fdsh sig 50=0 178=2=2 -par_compare_exit_codes fdsh exit 178=0 178=2=2 -par_compare_exit_codes fdsh sig 51=0 179=2=2 -par_compare_exit_codes fdsh exit 179=0 179=2=2 -par_compare_exit_codes fdsh sig 52=0 180=2=2 -par_compare_exit_codes fdsh exit 180=0 180=2=2 -par_compare_exit_codes fdsh sig 53=0 181=2=2 -par_compare_exit_codes fdsh exit 181=0 181=2=2 -par_compare_exit_codes fdsh sig 55=0 183=2=2 -par_compare_exit_codes fdsh exit 183=0 183=2=2 -par_compare_exit_codes fdsh sig 56=0 184=2=2 -par_compare_exit_codes fdsh exit 184=0 184=2=2 -par_compare_exit_codes fdsh sig 57=0 185=2=2 -par_compare_exit_codes fdsh exit 185=0 185=2=2 -par_compare_exit_codes fdsh sig 58=0 186=2=2 -par_compare_exit_codes fdsh exit 186=0 186=2=2 -par_compare_exit_codes fdsh sig 59=0 187=2=2 -par_compare_exit_codes fdsh exit 187=0 187=2=2 -par_compare_exit_codes fdsh sig 60=0 188=2=2 -par_compare_exit_codes fdsh exit 188=0 188=2=2 -par_compare_exit_codes fdsh sig 61=0 189=2=2 -par_compare_exit_codes fdsh exit 189=0 189=2=2 -par_compare_exit_codes fdsh sig 62=0 190=2=2 -par_compare_exit_codes fdsh exit 190=0 190=2=2 -par_compare_exit_codes fdsh sig 63=0 191=2=2 -par_compare_exit_codes fdsh exit 191=0 191=2=2 -par_halt_on_error -2 true true 0 -par_halt_on_error -2 true true 0 -par_halt_on_error -2 true true parallel: This job succeeded: -par_halt_on_error -2 true true sleep 1;true -par_halt_on_error -2 true true parallel: This job succeeded: -par_halt_on_error -2 true true sleep 1;true -par_halt_on_error -2 true false 0 -par_halt_on_error -2 true false 0 -par_halt_on_error -2 true false parallel: This job succeeded: -par_halt_on_error -2 true false sleep 1;true -par_halt_on_error -2 true false parallel: This job succeeded: -par_halt_on_error -2 true false sleep 1;true -par_halt_on_error -2 false true 0 -par_halt_on_error -2 false true 0 -par_halt_on_error -2 false true parallel: This job succeeded: -par_halt_on_error -2 false true sleep 2;true -par_halt_on_error -2 false true parallel: This job succeeded: -par_halt_on_error -2 false true sleep 2;true -par_halt_on_error -2 false false 3 -par_halt_on_error -2 false false 4 -par_halt_on_error -2 false false /bin/bash: line 1: non_exist: command not found -par_halt_on_error -1 true true 0 -par_halt_on_error -1 true true 0 -par_halt_on_error -1 true true parallel: This job succeeded: -par_halt_on_error -1 true true sleep 1;true -par_halt_on_error -1 true true parallel: Starting no more jobs. Waiting for 2 jobs to finish. -par_halt_on_error -1 true true parallel: This job succeeded: -par_halt_on_error -1 true true sleep 2;true -par_halt_on_error -1 true true parallel: Starting no more jobs. Waiting for 1 jobs to finish. -par_halt_on_error -1 true true parallel: This job succeeded: -par_halt_on_error -1 true true sleep 3;true -par_halt_on_error -1 true true parallel: This job succeeded: -par_halt_on_error -1 true true sleep 1;true -par_halt_on_error -1 true true parallel: Starting no more jobs. Waiting for 3 jobs to finish. -par_halt_on_error -1 true true parallel: This job succeeded: -par_halt_on_error -1 true true sleep 2;true -par_halt_on_error -1 true true parallel: Starting no more jobs. Waiting for 2 jobs to finish. -par_halt_on_error -1 true true parallel: This job succeeded: -par_halt_on_error -1 true true sleep 3;true -par_halt_on_error -1 true true parallel: Starting no more jobs. Waiting for 1 jobs to finish. -par_halt_on_error -1 true true /bin/bash: line 1: non_exist: command not found -par_halt_on_error -1 true false 0 -par_halt_on_error -1 true false 0 -par_halt_on_error -1 true false parallel: This job succeeded: -par_halt_on_error -1 true false sleep 1;true -par_halt_on_error -1 true false parallel: Starting no more jobs. Waiting for 2 jobs to finish. -par_halt_on_error -1 true false parallel: This job succeeded: -par_halt_on_error -1 true false sleep 3;true -par_halt_on_error -1 true false parallel: This job succeeded: -par_halt_on_error -1 true false sleep 1;true -par_halt_on_error -1 true false parallel: Starting no more jobs. Waiting for 3 jobs to finish. -par_halt_on_error -1 true false parallel: This job succeeded: -par_halt_on_error -1 true false sleep 3;true -par_halt_on_error -1 true false parallel: Starting no more jobs. Waiting for 1 jobs to finish. -par_halt_on_error -1 true false /bin/bash: line 1: non_exist: command not found -par_halt_on_error -1 false true 0 -par_halt_on_error -1 false true 0 -par_halt_on_error -1 false true parallel: This job succeeded: -par_halt_on_error -1 false true sleep 2;true -par_halt_on_error -1 false true parallel: Starting no more jobs. Waiting for 1 jobs to finish. -par_halt_on_error -1 false true parallel: This job succeeded: -par_halt_on_error -1 false true sleep 2;true -par_halt_on_error -1 false true parallel: Starting no more jobs. Waiting for 2 jobs to finish. -par_halt_on_error -1 false true /bin/bash: line 1: non_exist: command not found -par_halt_on_error -1 false false 3 -par_halt_on_error -1 false false 4 -par_halt_on_error -1 false false /bin/bash: line 1: non_exist: command not found -par_halt_on_error 0 true true 0 -par_halt_on_error 0 true true 1 -par_halt_on_error 0 true true /bin/bash: line 1: non_exist: command not found -par_halt_on_error 0 true false 1 -par_halt_on_error 0 true false 2 -par_halt_on_error 0 true false /bin/bash: line 1: non_exist: command not found -par_halt_on_error 0 false true 2 -par_halt_on_error 0 false true 3 -par_halt_on_error 0 false true /bin/bash: line 1: non_exist: command not found -par_halt_on_error 0 false false 3 -par_halt_on_error 0 false false 4 -par_halt_on_error 0 false false /bin/bash: line 1: non_exist: command not found -par_halt_on_error 1 true true 0 -par_halt_on_error 1 true true 127 -par_halt_on_error 1 true true /bin/bash: line 1: non_exist: command not found -par_halt_on_error 1 true true parallel: This job failed: -par_halt_on_error 1 true true sleep 4;non_exist -par_halt_on_error 1 true false 1 -par_halt_on_error 1 true false 1 -par_halt_on_error 1 true false parallel: This job failed: -par_halt_on_error 1 true false sleep 2;false -par_halt_on_error 1 true false parallel: Starting no more jobs. Waiting for 1 jobs to finish. -par_halt_on_error 1 true false parallel: This job failed: -par_halt_on_error 1 true false sleep 2;false -par_halt_on_error 1 true false parallel: Starting no more jobs. Waiting for 2 jobs to finish. -par_halt_on_error 1 true false /bin/bash: line 1: non_exist: command not found -par_halt_on_error 1 true false parallel: This job failed: -par_halt_on_error 1 true false sleep 4;non_exist -par_halt_on_error 1 false true 1 -par_halt_on_error 1 false true 1 -par_halt_on_error 1 false true parallel: This job failed: -par_halt_on_error 1 false true sleep 1;false -par_halt_on_error 1 false true parallel: Starting no more jobs. Waiting for 2 jobs to finish. -par_halt_on_error 1 false true parallel: This job failed: -par_halt_on_error 1 false true sleep 3;false -par_halt_on_error 1 false true parallel: This job failed: -par_halt_on_error 1 false true sleep 1;false -par_halt_on_error 1 false true parallel: Starting no more jobs. Waiting for 3 jobs to finish. -par_halt_on_error 1 false true parallel: This job failed: -par_halt_on_error 1 false true sleep 3;false -par_halt_on_error 1 false true parallel: Starting no more jobs. Waiting for 1 jobs to finish. -par_halt_on_error 1 false true /bin/bash: line 1: non_exist: command not found -par_halt_on_error 1 false true parallel: This job failed: -par_halt_on_error 1 false true sleep 4;non_exist -par_halt_on_error 1 false false 1 -par_halt_on_error 1 false false 1 -par_halt_on_error 1 false false parallel: This job failed: -par_halt_on_error 1 false false sleep 1;false -par_halt_on_error 1 false false parallel: Starting no more jobs. Waiting for 2 jobs to finish. -par_halt_on_error 1 false false parallel: This job failed: -par_halt_on_error 1 false false sleep 2;false -par_halt_on_error 1 false false parallel: Starting no more jobs. Waiting for 1 jobs to finish. -par_halt_on_error 1 false false parallel: This job failed: -par_halt_on_error 1 false false sleep 3;false -par_halt_on_error 1 false false parallel: This job failed: -par_halt_on_error 1 false false sleep 1;false -par_halt_on_error 1 false false parallel: Starting no more jobs. Waiting for 3 jobs to finish. -par_halt_on_error 1 false false parallel: This job failed: -par_halt_on_error 1 false false sleep 2;false -par_halt_on_error 1 false false parallel: Starting no more jobs. Waiting for 2 jobs to finish. -par_halt_on_error 1 false false parallel: This job failed: -par_halt_on_error 1 false false sleep 3;false -par_halt_on_error 1 false false parallel: Starting no more jobs. Waiting for 1 jobs to finish. -par_halt_on_error 1 false false /bin/bash: line 1: non_exist: command not found -par_halt_on_error 1 false false parallel: This job failed: -par_halt_on_error 1 false false sleep 4;non_exist -par_halt_on_error 2 true true 0 -par_halt_on_error 2 true true 127 -par_halt_on_error 2 true true /bin/bash: line 1: non_exist: command not found -par_halt_on_error 2 true true parallel: This job failed: -par_halt_on_error 2 true true sleep 4;non_exist -par_halt_on_error 2 true false 1 -par_halt_on_error 2 true false 1 -par_halt_on_error 2 true false parallel: This job failed: -par_halt_on_error 2 true false sleep 2;false -par_halt_on_error 2 true false parallel: This job failed: -par_halt_on_error 2 true false sleep 2;false -par_halt_on_error 2 false true 1 -par_halt_on_error 2 false true 1 -par_halt_on_error 2 false true parallel: This job failed: -par_halt_on_error 2 false true sleep 1;false -par_halt_on_error 2 false true parallel: This job failed: -par_halt_on_error 2 false true sleep 1;false -par_halt_on_error 2 false false 1 -par_halt_on_error 2 false false 1 -par_halt_on_error 2 false false parallel: This job failed: -par_halt_on_error 2 false false sleep 1;false -par_halt_on_error 2 false false parallel: This job failed: -par_halt_on_error 2 false false sleep 1;false par_mem_leak ### test for mem leak par_mem_leak no mem leak detected -par_outside_file_handle_limit ### Test Force outside the file handle limit, 2009-02-17 Gave fork error -par_outside_file_handle_limit parallel: Warning: Only enough file handles to run 999 jobs in parallel. -par_outside_file_handle_limit parallel: Warning: Try running 'parallel -j0 -N 999 --pipe parallel -j0' -par_outside_file_handle_limit parallel: Warning: or increasing 'ulimit -n' (try: ulimit -n `ulimit -Hn`) -par_outside_file_handle_limit parallel: Warning: or increasing 'nofile' in /etc/security/limits.conf -par_outside_file_handle_limit parallel: Warning: or increasing /proc/sys/fs/file-max -par_outside_file_handle_limit Start -par_outside_file_handle_limit end -par_over_4GB ### Test if we can deal with output > 4 GB -par_over_4GB 46a318993dfc8e2afd71ff2bc6f605f1 - -par_retries_unreachable ### Test of --retries on unreachable host -par_retries_unreachable parallel: Warning: Could not figure out number of cpus on 4.3.2.1 (). Using 1. -par_retries_unreachable echo 1 -par_retries_unreachable 1 -par_retries_unreachable echo 2 -par_retries_unreachable 2 par_test_build_and_install make[0]: Entering directory '~/privat/parallel' par_test_build_and_install make dist-gzip am__post_remove_distdir='@:' par_test_build_and_install make[0]: Entering directory '~/privat/parallel' @@ -1006,3 +703,306 @@ par_test_build_and_install make[0]: Leaving directory '/tmp/parallel-00000000' par_test_build_and_install make[0]: Leaving directory '/tmp/parallel-00000000' par_test_build_and_install make[0]: Leaving directory '/tmp/parallel-00000000' par_test_build_and_install make[0]: Leaving directory '/tmp/parallel-00000000' +par_compare_exit_codes ### compare the exit codes +par_compare_exit_codes directly from shells, shells called from parallel, +par_compare_exit_codes killed with different signals +par_compare_exit_codes sig=joblog_sig shell=parallel=joblog +par_compare_exit_codes par_compare_exit_codes +par_compare_exit_codes csh sig 2=0 130=1=1 +par_compare_exit_codes posh sig 34=11 162=139=139 +par_compare_exit_codes posh sig 35=11 163=139=139 +par_compare_exit_codes posh sig 36=11 164=139=139 +par_compare_exit_codes posh sig 37=11 165=139=139 +par_compare_exit_codes posh sig 38=11 166=139=139 +par_compare_exit_codes posh sig 39=11 167=139=139 +par_compare_exit_codes posh sig 40=11 168=139=139 +par_compare_exit_codes posh sig 41=11 169=139=139 +par_compare_exit_codes posh sig 42=11 170=139=139 +par_compare_exit_codes posh sig 43=11 171=139=139 +par_compare_exit_codes posh sig 44=11 172=139=139 +par_compare_exit_codes posh sig 45=11 173=139=139 +par_compare_exit_codes posh sig 46=11 174=139=139 +par_compare_exit_codes posh sig 47=11 175=139=139 +par_compare_exit_codes posh sig 48=11 176=139=139 +par_compare_exit_codes posh sig 49=11 177=139=139 +par_compare_exit_codes posh sig 50=11 178=139=139 +par_compare_exit_codes posh sig 51=11 179=139=139 +par_compare_exit_codes posh sig 52=11 180=139=139 +par_compare_exit_codes posh sig 53=11 181=139=139 +par_compare_exit_codes posh sig 54=11 182=139=139 +par_compare_exit_codes posh sig 55=11 183=139=139 +par_compare_exit_codes posh sig 56=11 184=139=139 +par_compare_exit_codes posh sig 57=11 185=139=139 +par_compare_exit_codes posh sig 58=11 186=139=139 +par_compare_exit_codes posh sig 59=11 187=139=139 +par_compare_exit_codes posh sig 60=11 188=139=139 +par_compare_exit_codes posh sig 61=11 189=139=139 +par_compare_exit_codes posh sig 62=11 190=139=139 +par_compare_exit_codes posh sig 63=11 191=139=139 +par_compare_exit_codes posh sig 64=11 192=139=139 +par_compare_exit_codes par_compare_exit_codes +par_compare_exit_codes tcsh sig 2=0 130=1=1 +par_compare_exit_codes fdsh sig 2=0 0=2=2 +par_compare_exit_codes fdsh exit 130=0 130=2=2 +par_compare_exit_codes fdsh sig 9=0 137=2=2 +par_compare_exit_codes fdsh exit 137=0 137=2=2 +par_compare_exit_codes fdsh sig 10=0 0=2=2 +par_compare_exit_codes fdsh exit 138=0 138=2=2 +par_compare_exit_codes fdsh sig 11=0 0=2=2 +par_compare_exit_codes fdsh exit 139=0 139=2=2 +par_compare_exit_codes fdsh sig 12=0 0=2=2 +par_compare_exit_codes fdsh exit 140=0 140=2=2 +par_compare_exit_codes fdsh sig 15=0 0=2=2 +par_compare_exit_codes fdsh exit 143=0 143=2=2 +par_compare_exit_codes fdsh sig 16=0 144=2=2 +par_compare_exit_codes fdsh exit 144=0 144=2=2 +par_compare_exit_codes fdsh sig 17=0 0=2=2 +par_compare_exit_codes fdsh exit 145=0 145=2=2 +par_compare_exit_codes fdsh sig 18=0 0=2=2 +par_compare_exit_codes fdsh exit 146=0 146=2=2 +par_compare_exit_codes fdsh sig 20=0 0=2=2 +par_compare_exit_codes fdsh exit 148=0 148=2=2 +par_compare_exit_codes fdsh sig 21=0 0=2=2 +par_compare_exit_codes fdsh exit 149=0 149=2=2 +par_compare_exit_codes fdsh sig 22=0 0=2=2 +par_compare_exit_codes fdsh exit 150=0 150=2=2 +par_compare_exit_codes fdsh sig 23=0 0=2=2 +par_compare_exit_codes fdsh exit 151=0 151=2=2 +par_compare_exit_codes fdsh sig 26=0 154=2=2 +par_compare_exit_codes fdsh exit 154=0 154=2=2 +par_compare_exit_codes fdsh sig 27=0 155=2=2 +par_compare_exit_codes fdsh exit 155=0 155=2=2 +par_compare_exit_codes fdsh sig 29=0 157=2=2 +par_compare_exit_codes fdsh exit 157=0 157=2=2 +par_compare_exit_codes fdsh sig 30=0 158=2=2 +par_compare_exit_codes fdsh exit 158=0 158=2=2 +par_compare_exit_codes fdsh sig 32=0 0=2=2 +par_compare_exit_codes fdsh exit 160=0 160=2=2 +par_compare_exit_codes fdsh sig 33=0 0=2=2 +par_compare_exit_codes fdsh exit 161=0 161=2=2 +par_compare_exit_codes fdsh sig 35=0 163=2=2 +par_compare_exit_codes fdsh exit 163=0 163=2=2 +par_compare_exit_codes fdsh sig 36=0 164=2=2 +par_compare_exit_codes fdsh exit 164=0 164=2=2 +par_compare_exit_codes fdsh sig 37=0 165=2=2 +par_compare_exit_codes fdsh exit 165=0 165=2=2 +par_compare_exit_codes fdsh sig 38=0 166=2=2 +par_compare_exit_codes fdsh exit 166=0 166=2=2 +par_compare_exit_codes fdsh sig 39=0 167=2=2 +par_compare_exit_codes fdsh exit 167=0 167=2=2 +par_compare_exit_codes fdsh sig 40=0 168=2=2 +par_compare_exit_codes fdsh exit 168=0 168=2=2 +par_compare_exit_codes fdsh sig 41=0 169=2=2 +par_compare_exit_codes fdsh exit 169=0 169=2=2 +par_compare_exit_codes fdsh sig 42=0 170=2=2 +par_compare_exit_codes fdsh exit 170=0 170=2=2 +par_compare_exit_codes fdsh sig 43=0 171=2=2 +par_compare_exit_codes fdsh exit 171=0 171=2=2 +par_compare_exit_codes fdsh sig 45=0 173=2=2 +par_compare_exit_codes fdsh exit 173=0 173=2=2 +par_compare_exit_codes fdsh sig 46=0 174=2=2 +par_compare_exit_codes fdsh exit 174=0 174=2=2 +par_compare_exit_codes fdsh sig 47=0 175=2=2 +par_compare_exit_codes fdsh exit 175=0 175=2=2 +par_compare_exit_codes fdsh sig 48=0 176=2=2 +par_compare_exit_codes fdsh exit 176=0 176=2=2 +par_compare_exit_codes fdsh sig 49=0 177=2=2 +par_compare_exit_codes fdsh exit 177=0 177=2=2 +par_compare_exit_codes fdsh sig 50=0 178=2=2 +par_compare_exit_codes fdsh exit 178=0 178=2=2 +par_compare_exit_codes fdsh sig 51=0 179=2=2 +par_compare_exit_codes fdsh exit 179=0 179=2=2 +par_compare_exit_codes fdsh sig 52=0 180=2=2 +par_compare_exit_codes fdsh exit 180=0 180=2=2 +par_compare_exit_codes fdsh sig 53=0 181=2=2 +par_compare_exit_codes fdsh exit 181=0 181=2=2 +par_compare_exit_codes fdsh sig 55=0 183=2=2 +par_compare_exit_codes fdsh exit 183=0 183=2=2 +par_compare_exit_codes fdsh sig 56=0 184=2=2 +par_compare_exit_codes fdsh exit 184=0 184=2=2 +par_compare_exit_codes fdsh sig 57=0 185=2=2 +par_compare_exit_codes fdsh exit 185=0 185=2=2 +par_compare_exit_codes fdsh sig 58=0 186=2=2 +par_compare_exit_codes fdsh exit 186=0 186=2=2 +par_compare_exit_codes fdsh sig 59=0 187=2=2 +par_compare_exit_codes fdsh exit 187=0 187=2=2 +par_compare_exit_codes fdsh sig 60=0 188=2=2 +par_compare_exit_codes fdsh exit 188=0 188=2=2 +par_compare_exit_codes fdsh sig 61=0 189=2=2 +par_compare_exit_codes fdsh exit 189=0 189=2=2 +par_compare_exit_codes fdsh sig 62=0 190=2=2 +par_compare_exit_codes fdsh exit 190=0 190=2=2 +par_compare_exit_codes fdsh sig 63=0 191=2=2 +par_compare_exit_codes fdsh exit 191=0 191=2=2 +par_outside_file_handle_limit ### Test Force outside the file handle limit, 2009-02-17 Gave fork error +par_outside_file_handle_limit parallel: Warning: Only enough file handles to run 999 jobs in parallel. +par_outside_file_handle_limit parallel: Warning: Try running 'parallel -j0 -N 999 --pipe parallel -j0' +par_outside_file_handle_limit parallel: Warning: or increasing 'ulimit -n' (try: ulimit -n `ulimit -Hn`) +par_outside_file_handle_limit parallel: Warning: or increasing 'nofile' in /etc/security/limits.conf +par_outside_file_handle_limit parallel: Warning: or increasing /proc/sys/fs/file-max +par_outside_file_handle_limit Start +par_outside_file_handle_limit end +par_over_4GB ### Test if we can deal with output > 4 GB +par_over_4GB 46a318993dfc8e2afd71ff2bc6f605f1 - +par_retries_unreachable ### Test of --retries on unreachable host +par_retries_unreachable parallel: Warning: Could not figure out number of cpus on 4.3.2.1 (). Using 1. +par_retries_unreachable echo 1 +par_retries_unreachable 1 +par_retries_unreachable echo 2 +par_retries_unreachable 2 +par_halt_on_error -2 true true 0 +par_halt_on_error -2 true true 0 +par_halt_on_error -2 true true parallel: This job succeeded: +par_halt_on_error -2 true true sleep 1;true +par_halt_on_error -2 true true parallel: This job succeeded: +par_halt_on_error -2 true true sleep 1;true +par_halt_on_error -2 true false 0 +par_halt_on_error -2 true false 0 +par_halt_on_error -2 true false parallel: This job succeeded: +par_halt_on_error -2 true false sleep 1;true +par_halt_on_error -2 true false parallel: This job succeeded: +par_halt_on_error -2 true false sleep 1;true +par_halt_on_error -2 false true 0 +par_halt_on_error -2 false true 0 +par_halt_on_error -2 false true parallel: This job succeeded: +par_halt_on_error -2 false true sleep 2;true +par_halt_on_error -2 false true parallel: This job succeeded: +par_halt_on_error -2 false true sleep 2;true +par_halt_on_error -2 false false 3 +par_halt_on_error -2 false false 4 +par_halt_on_error -2 false false /bin/bash: line 1: non_exist: command not found +par_halt_on_error -1 true true 0 +par_halt_on_error -1 true true 0 +par_halt_on_error -1 true true parallel: This job succeeded: +par_halt_on_error -1 true true sleep 1;true +par_halt_on_error -1 true true parallel: Starting no more jobs. Waiting for 2 jobs to finish. +par_halt_on_error -1 true true parallel: This job succeeded: +par_halt_on_error -1 true true sleep 2;true +par_halt_on_error -1 true true parallel: Starting no more jobs. Waiting for 1 jobs to finish. +par_halt_on_error -1 true true parallel: This job succeeded: +par_halt_on_error -1 true true sleep 3;true +par_halt_on_error -1 true true parallel: This job succeeded: +par_halt_on_error -1 true true sleep 1;true +par_halt_on_error -1 true true parallel: Starting no more jobs. Waiting for 3 jobs to finish. +par_halt_on_error -1 true true parallel: This job succeeded: +par_halt_on_error -1 true true sleep 2;true +par_halt_on_error -1 true true parallel: Starting no more jobs. Waiting for 2 jobs to finish. +par_halt_on_error -1 true true parallel: This job succeeded: +par_halt_on_error -1 true true sleep 3;true +par_halt_on_error -1 true true parallel: Starting no more jobs. Waiting for 1 jobs to finish. +par_halt_on_error -1 true true /bin/bash: line 1: non_exist: command not found +par_halt_on_error -1 true false 0 +par_halt_on_error -1 true false 0 +par_halt_on_error -1 true false parallel: This job succeeded: +par_halt_on_error -1 true false sleep 1;true +par_halt_on_error -1 true false parallel: Starting no more jobs. Waiting for 2 jobs to finish. +par_halt_on_error -1 true false parallel: This job succeeded: +par_halt_on_error -1 true false sleep 3;true +par_halt_on_error -1 true false parallel: This job succeeded: +par_halt_on_error -1 true false sleep 1;true +par_halt_on_error -1 true false parallel: Starting no more jobs. Waiting for 3 jobs to finish. +par_halt_on_error -1 true false parallel: This job succeeded: +par_halt_on_error -1 true false sleep 3;true +par_halt_on_error -1 true false parallel: Starting no more jobs. Waiting for 1 jobs to finish. +par_halt_on_error -1 true false /bin/bash: line 1: non_exist: command not found +par_halt_on_error -1 false true 0 +par_halt_on_error -1 false true 0 +par_halt_on_error -1 false true parallel: This job succeeded: +par_halt_on_error -1 false true sleep 2;true +par_halt_on_error -1 false true parallel: Starting no more jobs. Waiting for 1 jobs to finish. +par_halt_on_error -1 false true parallel: This job succeeded: +par_halt_on_error -1 false true sleep 2;true +par_halt_on_error -1 false true parallel: Starting no more jobs. Waiting for 2 jobs to finish. +par_halt_on_error -1 false true /bin/bash: line 1: non_exist: command not found +par_halt_on_error -1 false false 3 +par_halt_on_error -1 false false 4 +par_halt_on_error -1 false false /bin/bash: line 1: non_exist: command not found +par_halt_on_error 0 true true 0 +par_halt_on_error 0 true true 1 +par_halt_on_error 0 true true /bin/bash: line 1: non_exist: command not found +par_halt_on_error 0 true false 1 +par_halt_on_error 0 true false 2 +par_halt_on_error 0 true false /bin/bash: line 1: non_exist: command not found +par_halt_on_error 0 false true 2 +par_halt_on_error 0 false true 3 +par_halt_on_error 0 false true /bin/bash: line 1: non_exist: command not found +par_halt_on_error 0 false false 3 +par_halt_on_error 0 false false 4 +par_halt_on_error 0 false false /bin/bash: line 1: non_exist: command not found +par_halt_on_error 1 true true 0 +par_halt_on_error 1 true true 127 +par_halt_on_error 1 true true /bin/bash: line 1: non_exist: command not found +par_halt_on_error 1 true true parallel: This job failed: +par_halt_on_error 1 true true sleep 4;non_exist +par_halt_on_error 1 true false 1 +par_halt_on_error 1 true false 1 +par_halt_on_error 1 true false parallel: This job failed: +par_halt_on_error 1 true false sleep 2;false +par_halt_on_error 1 true false parallel: Starting no more jobs. Waiting for 1 jobs to finish. +par_halt_on_error 1 true false parallel: This job failed: +par_halt_on_error 1 true false sleep 2;false +par_halt_on_error 1 true false parallel: Starting no more jobs. Waiting for 2 jobs to finish. +par_halt_on_error 1 true false /bin/bash: line 1: non_exist: command not found +par_halt_on_error 1 true false parallel: This job failed: +par_halt_on_error 1 true false sleep 4;non_exist +par_halt_on_error 1 false true 1 +par_halt_on_error 1 false true 1 +par_halt_on_error 1 false true parallel: This job failed: +par_halt_on_error 1 false true sleep 1;false +par_halt_on_error 1 false true parallel: Starting no more jobs. Waiting for 2 jobs to finish. +par_halt_on_error 1 false true parallel: This job failed: +par_halt_on_error 1 false true sleep 3;false +par_halt_on_error 1 false true parallel: This job failed: +par_halt_on_error 1 false true sleep 1;false +par_halt_on_error 1 false true parallel: Starting no more jobs. Waiting for 3 jobs to finish. +par_halt_on_error 1 false true parallel: This job failed: +par_halt_on_error 1 false true sleep 3;false +par_halt_on_error 1 false true parallel: Starting no more jobs. Waiting for 1 jobs to finish. +par_halt_on_error 1 false true /bin/bash: line 1: non_exist: command not found +par_halt_on_error 1 false true parallel: This job failed: +par_halt_on_error 1 false true sleep 4;non_exist +par_halt_on_error 1 false false 1 +par_halt_on_error 1 false false 1 +par_halt_on_error 1 false false parallel: This job failed: +par_halt_on_error 1 false false sleep 1;false +par_halt_on_error 1 false false parallel: Starting no more jobs. Waiting for 2 jobs to finish. +par_halt_on_error 1 false false parallel: This job failed: +par_halt_on_error 1 false false sleep 2;false +par_halt_on_error 1 false false parallel: Starting no more jobs. Waiting for 1 jobs to finish. +par_halt_on_error 1 false false parallel: This job failed: +par_halt_on_error 1 false false sleep 3;false +par_halt_on_error 1 false false parallel: This job failed: +par_halt_on_error 1 false false sleep 1;false +par_halt_on_error 1 false false parallel: Starting no more jobs. Waiting for 3 jobs to finish. +par_halt_on_error 1 false false parallel: This job failed: +par_halt_on_error 1 false false sleep 2;false +par_halt_on_error 1 false false parallel: Starting no more jobs. Waiting for 2 jobs to finish. +par_halt_on_error 1 false false parallel: This job failed: +par_halt_on_error 1 false false sleep 3;false +par_halt_on_error 1 false false parallel: Starting no more jobs. Waiting for 1 jobs to finish. +par_halt_on_error 1 false false /bin/bash: line 1: non_exist: command not found +par_halt_on_error 1 false false parallel: This job failed: +par_halt_on_error 1 false false sleep 4;non_exist +par_halt_on_error 2 true true 0 +par_halt_on_error 2 true true 127 +par_halt_on_error 2 true true /bin/bash: line 1: non_exist: command not found +par_halt_on_error 2 true true parallel: This job failed: +par_halt_on_error 2 true true sleep 4;non_exist +par_halt_on_error 2 true false 1 +par_halt_on_error 2 true false 1 +par_halt_on_error 2 true false parallel: This job failed: +par_halt_on_error 2 true false sleep 2;false +par_halt_on_error 2 true false parallel: This job failed: +par_halt_on_error 2 true false sleep 2;false +par_halt_on_error 2 false true 1 +par_halt_on_error 2 false true 1 +par_halt_on_error 2 false true parallel: This job failed: +par_halt_on_error 2 false true sleep 1;false +par_halt_on_error 2 false true parallel: This job failed: +par_halt_on_error 2 false true sleep 1;false +par_halt_on_error 2 false false 1 +par_halt_on_error 2 false false 1 +par_halt_on_error 2 false false parallel: This job failed: +par_halt_on_error 2 false false sleep 1;false +par_halt_on_error 2 false false parallel: This job failed: +par_halt_on_error 2 false false sleep 1;false