diff --git a/src/parallel b/src/parallel index 4a0a2c9a..c560bf41 100755 --- a/src/parallel +++ b/src/parallel @@ -3726,7 +3726,7 @@ sub onall { sub __SIGNAL_HANDLING__ {} -sub tstp { +sub sigtstp { # Send TSTP signal (Ctrl-Z) to all children process groups # Uses: # %SIG @@ -3749,13 +3749,13 @@ sub signal_children { # %SIG # Returns: N/A my $signal = shift; + debug("run", "Sending $signal "); kill $signal, map { -$_ } keys %Global::running; # Use default signal handler for GNU Parallel itself $SIG{$signal} = undef; kill $signal, $$; } - sub save_original_signal_handler { # Remember the original signal handler # Uses: @@ -3773,11 +3773,11 @@ sub save_original_signal_handler { $SIG{TERM} = sub {}; # Dummy until jobs really start $SIG{ALRM} = 'IGNORE'; # Allow Ctrl-Z to suspend and `fg` to continue - $SIG{TSTP} = \&tstp; + $SIG{TSTP} = \&sigtstp; $SIG{PIPE} = \&sigpipe; $SIG{CONT} = sub { - # Set $SIG{TSTP} again (it is undef'ed in tstp() ) - $SIG{TSTP} = \&tstp; + # Set $SIG{TSTP} again (it is undef'ed in sigtstp() ) + $SIG{TSTP} = \&sigtstp; # Send continue signal to all children process groups kill "CONT", map { -$_ } keys %Global::running; }; @@ -6438,7 +6438,7 @@ sub rsync_transfer_cmd { } $file = ::shell_quote_file($file); my $sshcmd = $self->sshcommand(); - my $rsync_opt = "-KrlDzR -e" . ::shell_quote_scalar($sshcmd); + my $rsync_opt = "-rlDzR -e" . ::shell_quote_scalar($sshcmd); my $serverlogin = $self->serverlogin(); # Make dir if it does not exist return "$sshcmd $serverlogin -- mkdir -p $rsync_destdir && " . @@ -6980,6 +6980,10 @@ sub write { # syswrite may not write all in one go, # so make sure everything is written. my $written; + + # If writing is to a closed pipe: + # Do not call signal handler, but let nothing be written + local $SIG{PIPE} = undef; while($written = syswrite($stdin_fh,$$remaining_ref)){ substr($$remaining_ref,0,$written) = ""; } diff --git a/testsuite/tests-to-run/parallel-local-0.3s.sh b/testsuite/tests-to-run/parallel-local-0.3s.sh index 8ee48e11..b7c2cf74 100644 --- a/testsuite/tests-to-run/parallel-local-0.3s.sh +++ b/testsuite/tests-to-run/parallel-local-0.3s.sh @@ -174,17 +174,6 @@ echo 'bug #46016: --joblog should not log when --dryrun' echo '**' -echo 'bug #45993: --wd ... should also work when run locally' - - parallel --wd /bi 'pwd; echo $OLDPWD; echo' ::: fail - parallel --wd /bin 'pwd; echo $OLDPWD; echo' ::: OK - parallel --wd / 'pwd; echo $OLDPWD; echo' ::: OK - parallel --wd /tmp 'pwd; echo $OLDPWD; echo' ::: OK - parallel --wd ... 'pwd; echo $OLDPWD; echo' ::: OK | perl -pe 's/\d+/0/g' - parallel --wd . 'pwd; echo $OLDPWD; echo' ::: OK - -echo '**' - echo 'bug #46232: {%} with --bar/--eta/--shuf or --halt xx% broken' parallel --bar -kj2 --delay 0.1 echo {%} ::: a b ::: c d e 2>/dev/null @@ -552,13 +541,6 @@ echo '### bug #36260: {n} expansion in --colsep files fails for empty fields if echo A,B,, | parallel --colsep , echo {1}{3}{2} -echo '**' - -echo '### bug #34422: parallel -X --eta crashes with div by zero' - - # We do not care how long it took - seq 2 | stdout parallel -X --eta echo | grep -E -v 'ETA:.*AVG' - echo '**' bash -O extglob -c '. `which env_parallel.bash`; @@ -724,6 +706,28 @@ par_newline_in_command() { " ::: O ::: K } +par_wd_3dot_local() { + echo 'bug #45993: --wd ... should also work when run locally' + + parallel --wd /bi 'pwd; echo $OLDPWD; echo' ::: fail + parallel --wd /bin 'pwd; echo $OLDPWD; echo' ::: OK + parallel --wd / 'pwd; echo $OLDPWD; echo' ::: OK + parallel --wd /tmp 'pwd; echo $OLDPWD; echo' ::: OK + parallel --wd ... 'pwd; echo $OLDPWD; echo' ::: OK | + perl -pe 's:/mnt/4tb::; s/'`hostname`'/hostname/g' | + perl -pe 's/\d+/0/g' + parallel --wd . 'pwd; echo $OLDPWD; echo' ::: OK +} + +par_X_eta_div_zero() { + echo '### bug #34422: parallel -X --eta crashes with div by zero' + + # We do not care how long it took + seq 2 | stdout parallel -X --eta echo | + grep -E -v 'ETA:.*AVG' | + perl -pe 's/\d+/0/g' +} + export -f $(compgen -A function | grep par_) compgen -A function | grep par_ | sort | parallel -j6 --tag -k --joblog +/tmp/jl-`basename $0` '{} 2>&1' diff --git a/testsuite/tests-to-run/parallel-local-100s.sh b/testsuite/tests-to-run/parallel-local-100s.sh index 1d627bbf..d2f89fd2 100644 --- a/testsuite/tests-to-run/parallel-local-100s.sh +++ b/testsuite/tests-to-run/parallel-local-100s.sh @@ -31,42 +31,44 @@ par_over_4GB() { } -measure() { - # Input: - # $1 = iterations - # $2 = sleep 1 sec for every $2 - seq $1 | ramusage parallel -u sleep '{= $_=$_%'$2'?0:1 =}' -} -export -f measure -no_mem_leak() { - # Return false if leaking - max1000=$(parallel measure {} 100000 ::: 1000 1000 1000 1000 1000 1000 1000 1000 | - sort -n | tail -n 1) - min30000=$(parallel measure {} 100000 ::: 30000 30000 30000 | - sort -n | head -n 1) - if [ $max1000 -gt $min30000 ] ; then - # Make sure there are a few sleeps - max1000=$(parallel measure {} 100 ::: 1000 1000 1000 1000 1000 1000 1000 1000 | - sort -n | tail -n 1) - min30000=$(parallel measure {} 100 ::: 30000 30000 30000 | - sort -n | head -n 1) +par_mem_leak() { + echo "### test for mem leak" + + no_mem_leak() { + measure() { + # Input: + # $1 = iterations + # $2 = sleep 1 sec for every $2 + seq $1 | ramusage parallel -u sleep '{= $_=$_%'$2'?0:1 =}' + } + export -f measure + + # Return false if leaking + max1000=$(parallel measure {} 100000 ::: 1000 1000 1000 1000 1000 1000 1000 1000 | + sort -n | tail -n 1) + min30000=$(parallel measure {} 100000 ::: 3000 3000 3000 | + sort -n | head -n 1) if [ $max1000 -gt $min30000 ] ; then - echo $max1000 -gt $min30000 = no leak - return 0 + # Make sure there are a few sleeps + max1000=$(parallel measure {} 100 ::: 1000 1000 1000 1000 1000 1000 1000 1000 | + sort -n | tail -n 1) + min30000=$(parallel measure {} 100 ::: 3000 3000 3000 | + sort -n | head -n 1) + if [ $max1000 -gt $min30000 ] ; then + echo $max1000 -gt $min30000 = no leak + return 0 + else + echo not $max1000 -gt $min30000 = possible leak + return 1 + fi else echo not $max1000 -gt $min30000 = possible leak return 1 fi - else - echo not $max1000 -gt $min30000 = possible leak - return 1 - fi -} -export -f no_mem_leak + } -par_mem_leak() { - echo "### test for mem leak" + renice -n 3 $$ 2>/dev/null >/dev/null if no_mem_leak >/dev/null ; then echo no mem leak detected else @@ -82,6 +84,28 @@ par_timeout() { perl -ne '10 < $_ and $_ < 100 and print "OK\n"' } +par_halt_on_error() { + mytest() { + HALT=$1 + BOOL1=$2 + BOOL2=$3 + (echo "sleep 1;$BOOL1"; + echo "sleep 2;$BOOL2"; + echo "sleep 3;$BOOL1") | + parallel -j10 --halt-on-error $HALT + echo $? + (echo "sleep 1;$BOOL1"; + echo "sleep 2;$BOOL2"; + echo "sleep 3;$BOOL1"; + echo "sleep 4;non_exist"; + ) | + parallel -j10 --halt-on-error $HALT + echo $? + } + export -f mytest + parallel -j1 -k --tag mytest ::: -2 -1 0 1 2 ::: true false ::: true false +} + export -f $(compgen -A function | grep par_) compgen -A function | grep par_ | sort | parallel -vj0 -k --tag --joblog /tmp/jl-`basename $0` '{} 2>&1' diff --git a/testsuite/tests-to-run/parallel-local-10s.sh b/testsuite/tests-to-run/parallel-local-10s.sh index 8ae8ffbd..6dc56a57 100644 --- a/testsuite/tests-to-run/parallel-local-10s.sh +++ b/testsuite/tests-to-run/parallel-local-10s.sh @@ -98,52 +98,6 @@ par_k() { echo "echo end") | stdout nice parallel -k -j0 } -par_halt_on_error() { - mytest() { - HALT=$1 - BOOL1=$2 - BOOL2=$3 - (echo "sleep 1;$BOOL1"; - echo "sleep 2;$BOOL2"; - echo "sleep 3;$BOOL1") | - parallel -j10 --halt-on-error $HALT - echo $? - (echo "sleep 1;$BOOL1"; - echo "sleep 2;$BOOL2"; - echo "sleep 3;$BOOL1"; - echo "sleep 4;non_exist"; - ) | - parallel -j10 --halt-on-error $HALT - echo $? - } - export -f mytest - parallel -j0 -k --tag mytest ::: -2 -1 0 1 2 ::: true false ::: true false -} - -par_first_print_halt_on_error_1() { - echo '### Test first dying print --halt-on-error 1'; - (echo 0; echo 3; seq 0 7;echo 0; echo 8) | parallel -j10 -kq --halt 1 perl -e 'sleep $ARGV[0];print STDERR @ARGV,"\n"; exit shift'; - echo exit code $? -} - -par_first_print_halt_on_error_2() { - echo '### Test last dying print --halt-on-error 2'; - (echo 0; echo 3; seq 0 7;echo 0; echo 8) | parallel -j10 -kq --halt 2 perl -e 'sleep $ARGV[0];print STDERR @ARGV,"\n"; exit shift'; - echo exit code $? -} - -par_first_print_halt_on_error_minus_1() { - echo '### Test last dying print --halt-on-error -1'; - (echo 0; echo 3; seq 0 7;echo 0; echo 8) | parallel -j10 -kq --halt -1 perl -e 'sleep $ARGV[0];print STDERR @ARGV,"\n"; exit not shift'; - echo exit code $? -} - -par_first_print_halt_on_error_minus_2() { - echo '### Test last dying print --halt-on-error -2'; - (echo 0; echo 3; seq 0 7;echo 0; echo 8) | parallel -j10 -kq --halt -2 perl -e 'sleep $ARGV[0];print STDERR @ARGV,"\n"; exit not shift'; - echo exit code $? -} - par_k_linebuffer() { echo '### bug #47750: -k --line-buffer should give current job up to now' diff --git a/testsuite/tests-to-run/parallel-local-ssh6.sh b/testsuite/tests-to-run/parallel-local-ssh6.sh index 54465a38..73ef5d29 100644 --- a/testsuite/tests-to-run/parallel-local-ssh6.sh +++ b/testsuite/tests-to-run/parallel-local-ssh6.sh @@ -26,18 +26,24 @@ par_test_onall_u() { par_test_nonall() { echo '### Test --nonall' parallel --nonall -k -S $SSHLOGIN1,$SSHLOGIN2 pwd | + perl -pe 's:/mnt/4tb::g' | sort } par_test_nonall_u() { echo '### Test --nonall -u - should be interleaved x y x y' - parallel --nonall -S $SSHLOGIN1,$SSHLOGIN2 -u 'pwd|grep -q csh && sleep 3; pwd;sleep 12;pwd;' + parallel --nonall -S $SSHLOGIN1,$SSHLOGIN2 -u 'pwd|grep -q csh && sleep 3; pwd;sleep 12;pwd;' | + perl -pe 's:/mnt/4tb::g' } par_read_sshloginfile_from_stdin() { echo '### Test read sshloginfile from STDIN' - echo $SSHLOGIN1,$SSHLOGIN2 | parallel -S - -k --nonall pwd - echo $SSHLOGIN1,$SSHLOGIN2 | parallel --sshloginfile - -k --onall pwd\; echo ::: foo + echo $SSHLOGIN1,$SSHLOGIN2 | + parallel -S - -k --nonall pwd | + perl -pe 's:/mnt/4tb::g' + echo $SSHLOGIN1,$SSHLOGIN2 | + parallel --sshloginfile - -k --onall pwd\; echo ::: foo | + perl -pe 's:/mnt/4tb::g' } par_nonall_basefile() { @@ -77,7 +83,8 @@ par_workdir_dot() { ssh $SSHLOGIN1 mkdir -p mydir mkdir -p $HOME/mydir cd $HOME/mydir - parallel --workdir . -S $SSHLOGIN1 ::: pwd + parallel --workdir . -S $SSHLOGIN1 ::: pwd | + perl -pe 's:/mnt/4tb::g' } par_wd_dot() { @@ -85,7 +92,8 @@ par_wd_dot() { ssh $SSHLOGIN2 mkdir -p mydir mkdir -p $HOME/mydir cd $HOME/mydir - parallel --workdir . -S $SSHLOGIN2 ::: pwd + parallel --workdir . -S $SSHLOGIN2 ::: pwd | + perl -pe 's:/mnt/4tb::g' } par_wd_braces() { diff --git a/testsuite/tests-to-run/parallel-local-ssh7.sh b/testsuite/tests-to-run/parallel-local-ssh7.sh index 103ad3cf..608591d7 100755 --- a/testsuite/tests-to-run/parallel-local-ssh7.sh +++ b/testsuite/tests-to-run/parallel-local-ssh7.sh @@ -945,16 +945,13 @@ par_bash_environment_too_big() { myscript=$(cat <<'_EOF' echo 'bug #50815: env_parallel should warn if the environment is too big' . `which env_parallel.bash`; - bigvar="$(yes | head -c 119k)" - env_parallel echo ::: OK - env_parallel -S lo echo ::: OK - bigvar="$(yes \"| head -c 79k)" + bigvar="$(yes \"| head -c 76k)" env_parallel echo ::: OK env_parallel -S lo echo ::: OK bigvar=u - eval 'bigfunc() { a="'"$(yes a| head -c 120k)"'"; };' + eval 'bigfunc() { a="'"$(yes a| head -c 115k)"'"; };' env_parallel echo ::: OK env_parallel -S lo echo ::: OK diff --git a/testsuite/tests-to-run/parallel-local-ssh8.sh b/testsuite/tests-to-run/parallel-local-ssh8.sh index 3f995439..1bc2aab0 100644 --- a/testsuite/tests-to-run/parallel-local-ssh8.sh +++ b/testsuite/tests-to-run/parallel-local-ssh8.sh @@ -7,7 +7,7 @@ par_path_remote_bash() { rm -rf /tmp/parallel cp /usr/local/bin/parallel /tmp - cat <<'_EOS' | stdout ssh nopathbash@lo -T | grep -Ev 'packages can be updated|System restart required|Welcome to|https://|Ubuntu|http://' | uniq + cat <<'_EOS' | stdout ssh nopathbash@lo -T | grep -Ev 'updates are security updates|packages can be updated|System restart required|Welcome to|https://|Ubuntu|http://|^$' | uniq echo BASH Path before: $PATH with no parallel parallel echo ::: 1 # Race condition stderr/stdout @@ -28,7 +28,7 @@ par_path_remote_csh() { rm -rf /tmp/parallel cp /usr/local/bin/parallel /tmp - cat <<'_EOS' | stdout ssh nopathcsh@lo -T | grep -Ev 'packages can be updated|System restart required|Welcome to|https://|Ubuntu|http://' | uniq + cat <<'_EOS' | stdout ssh nopathcsh@lo -T | grep -Ev 'updates are security updates|packages can be updated|System restart required|Welcome to|https://|Ubuntu|http://' | uniq echo CSH Path before: $PATH with no parallel which parallel >& /dev/stdout echo '^^^^^^^^ Not found is OK' diff --git a/testsuite/wanted-results/parallel-local-0.3s b/testsuite/wanted-results/parallel-local-0.3s index 1b9cd955..836b3618 100644 --- a/testsuite/wanted-results/parallel-local-0.3s +++ b/testsuite/wanted-results/parallel-local-0.3s @@ -275,32 +275,6 @@ bug #46016: --joblog should not log when --dryrun echo Only_this echo '**' ** -echo 'bug #45993: --wd ... should also work when run locally' -bug #45993: --wd ... should also work when run locally - parallel --wd /bi 'pwd; echo $OLDPWD; echo' ::: fail -parallel: Error: Cannot change into non-executable dir /bi: No such file or directory - parallel --wd /bin 'pwd; echo $OLDPWD; echo' ::: OK -/bin -~/privat/parallel/testsuite -OK - parallel --wd / 'pwd; echo $OLDPWD; echo' ::: OK -/ -~/privat/parallel/testsuite -OK - parallel --wd /tmp 'pwd; echo $OLDPWD; echo' ::: OK -/tmp -~/privat/parallel/testsuite -OK - parallel --wd ... 'pwd; echo $OLDPWD; echo' ::: OK | perl -pe 's/\d+/0/g' -~/.parallel/tmp/hk-0-0 -~/privat/parallel/testsuite -OK - parallel --wd . 'pwd; echo $OLDPWD; echo' ::: OK -~/privat/parallel/testsuite -~/privat/parallel/testsuite -OK -echo '**' -** echo 'bug #46232: {%} with --bar/--eta/--shuf or --halt xx% broken' bug #46232: {%} with --bar/--eta/--shuf or --halt xx% broken parallel --bar -kj2 --delay 0.1 echo {%} ::: a b ::: c d e 2>/dev/null @@ -1472,17 +1446,6 @@ echo '### bug #36260: {n} expansion in --colsep files fails for empty fields if echo A,B,, | parallel --colsep , echo {1}{3}{2} AB echo '**' -** -echo '### bug #34422: parallel -X --eta crashes with div by zero' -### bug #34422: parallel -X --eta crashes with div by zero - # We do not care how long it took - seq 2 | stdout parallel -X --eta echo | grep -E -v 'ETA:.*AVG' - -Computers / CPU cores / Max jobs to run -1:local / 2 / 2 - -Computer:jobs running/jobs completed/%of started jobs/Average seconds to complete -echo '**' ** bash -O extglob -c '. `which env_parallel.bash`; _longopt () { case "$prev" in --+([-a-z0-9_])) echo foo;; esac; }; env_parallel echo ::: env_parallel 2>&1 ' env_parallel @@ -1592,6 +1555,12 @@ echo '**' ** ### 1 .par file from --files expected 10 +par_X_eta_div_zero ### bug #34422: parallel -X --eta crashes with div by zero +par_X_eta_div_zero +par_X_eta_div_zero Computers / CPU cores / Max jobs to run +par_X_eta_div_zero 0:local / 0 / 0 +par_X_eta_div_zero +par_X_eta_div_zero Computer:jobs running/jobs completed/%of started jobs/Average seconds to complete par_append_joblog ### can you append to a joblog using + par_append_joblog 1 par_append_joblog 1 @@ -1683,3 +1652,20 @@ par_tee 4 -l 122853 par_tee 4 -c 815290 par_tee 5 -l 122853 par_tee 5 -c 815290 +par_wd_3dot_local bug #45993: --wd ... should also work when run locally +par_wd_3dot_local parallel: Error: Cannot change into non-executable dir /bi: No such file or directory +par_wd_3dot_local /bin +par_wd_3dot_local ~/privat/parallel/testsuite +par_wd_3dot_local OK +par_wd_3dot_local / +par_wd_3dot_local ~/privat/parallel/testsuite +par_wd_3dot_local OK +par_wd_3dot_local /tmp +par_wd_3dot_local ~/privat/parallel/testsuite +par_wd_3dot_local OK +par_wd_3dot_local /home/tange/.parallel/tmp/hostname-0-0 +par_wd_3dot_local /home/tange/privat/parallel/testsuite +par_wd_3dot_local OK +par_wd_3dot_local ~/privat/parallel/testsuite +par_wd_3dot_local ~/privat/parallel/testsuite +par_wd_3dot_local OK diff --git a/testsuite/wanted-results/parallel-local-100s b/testsuite/wanted-results/parallel-local-100s index be15e88a..cafb8945 100644 --- a/testsuite/wanted-results/parallel-local-100s +++ b/testsuite/wanted-results/parallel-local-100s @@ -1,3 +1,160 @@ +par_halt_on_error 2>&1 +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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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 2>&1 par_mem_leak ### test for mem leak par_mem_leak no mem leak detected diff --git a/testsuite/wanted-results/parallel-local-10s b/testsuite/wanted-results/parallel-local-10s index edc0c461..542478a0 100644 --- a/testsuite/wanted-results/parallel-local-10s +++ b/testsuite/wanted-results/parallel-local-10s @@ -7,259 +7,13 @@ par__pipe_tee bug #45479: --pipe/--pipepart --tee par__pipe_tee --pipe --tee par__pipe_tee 3221225472 par__pipepart_spawn ### bug #46214: Using --pipepart doesnt spawn multiple jobs in version 20150922 -par__pipepart_spawn 1:local / 2 / 999 +par__pipepart_spawn 1:local / 8 / 999 par__pipepart_tee bug #45479: --pipe/--pipepart --tee par__pipepart_tee --pipepart --tee par__pipepart_tee 3221225472 par_compress_fail ### bug #41609: --compress fails par_compress_fail 24812dd0f24a26d08a780f988b9d5ad2 - par_compress_fail 24812dd0f24a26d08a780f988b9d5ad2 - -par_first_print_halt_on_error_1 ### Test first dying print --halt-on-error 1 -par_first_print_halt_on_error_1 0 -par_first_print_halt_on_error_1 parallel: This job failed: -par_first_print_halt_on_error_1 perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ shift 1 -par_first_print_halt_on_error_1 parallel: Starting no more jobs. Waiting for 8 jobs to finish. -par_first_print_halt_on_error_1 parallel: This job failed: -par_first_print_halt_on_error_1 perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ shift 2 -par_first_print_halt_on_error_1 parallel: Starting no more jobs. Waiting for 7 jobs to finish. -par_first_print_halt_on_error_1 3 -par_first_print_halt_on_error_1 0 -par_first_print_halt_on_error_1 1 -par_first_print_halt_on_error_1 2 -par_first_print_halt_on_error_1 parallel: This job failed: -par_first_print_halt_on_error_1 perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ shift 3 -par_first_print_halt_on_error_1 parallel: Starting no more jobs. Waiting for 6 jobs to finish. -par_first_print_halt_on_error_1 3 -par_first_print_halt_on_error_1 parallel: This job failed: -par_first_print_halt_on_error_1 perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ shift 3 -par_first_print_halt_on_error_1 parallel: Starting no more jobs. Waiting for 5 jobs to finish. -par_first_print_halt_on_error_1 4 -par_first_print_halt_on_error_1 parallel: This job failed: -par_first_print_halt_on_error_1 perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ shift 4 -par_first_print_halt_on_error_1 parallel: Starting no more jobs. Waiting for 4 jobs to finish. -par_first_print_halt_on_error_1 5 -par_first_print_halt_on_error_1 parallel: This job failed: -par_first_print_halt_on_error_1 perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ shift 5 -par_first_print_halt_on_error_1 parallel: Starting no more jobs. Waiting for 3 jobs to finish. -par_first_print_halt_on_error_1 6 -par_first_print_halt_on_error_1 parallel: This job failed: -par_first_print_halt_on_error_1 perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ shift 6 -par_first_print_halt_on_error_1 parallel: Starting no more jobs. Waiting for 2 jobs to finish. -par_first_print_halt_on_error_1 7 -par_first_print_halt_on_error_1 0 -par_first_print_halt_on_error_1 parallel: This job failed: -par_first_print_halt_on_error_1 perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ shift 7 -par_first_print_halt_on_error_1 parallel: Starting no more jobs. Waiting for 1 jobs to finish. -par_first_print_halt_on_error_1 8 -par_first_print_halt_on_error_1 parallel: This job failed: -par_first_print_halt_on_error_1 perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ shift 8 -par_first_print_halt_on_error_1 exit code 1 -par_first_print_halt_on_error_2 ### Test last dying print --halt-on-error 2 -par_first_print_halt_on_error_2 0 -par_first_print_halt_on_error_2 parallel: This job failed: -par_first_print_halt_on_error_2 perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ shift 1 -par_first_print_halt_on_error_2 exit code 1 -par_first_print_halt_on_error_minus_1 ### Test last dying print --halt-on-error -1 -par_first_print_halt_on_error_minus_1 0 -par_first_print_halt_on_error_minus_1 parallel: This job succeeded: -par_first_print_halt_on_error_minus_1 perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ not\ shift 1 -par_first_print_halt_on_error_minus_1 parallel: Starting no more jobs. Waiting for 8 jobs to finish. -par_first_print_halt_on_error_minus_1 parallel: This job succeeded: -par_first_print_halt_on_error_minus_1 perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ not\ shift 2 -par_first_print_halt_on_error_minus_1 parallel: Starting no more jobs. Waiting for 7 jobs to finish. -par_first_print_halt_on_error_minus_1 3 -par_first_print_halt_on_error_minus_1 0 -par_first_print_halt_on_error_minus_1 1 -par_first_print_halt_on_error_minus_1 2 -par_first_print_halt_on_error_minus_1 parallel: This job succeeded: -par_first_print_halt_on_error_minus_1 perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ not\ shift 3 -par_first_print_halt_on_error_minus_1 parallel: Starting no more jobs. Waiting for 6 jobs to finish. -par_first_print_halt_on_error_minus_1 3 -par_first_print_halt_on_error_minus_1 parallel: This job succeeded: -par_first_print_halt_on_error_minus_1 perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ not\ shift 3 -par_first_print_halt_on_error_minus_1 parallel: Starting no more jobs. Waiting for 5 jobs to finish. -par_first_print_halt_on_error_minus_1 4 -par_first_print_halt_on_error_minus_1 parallel: This job succeeded: -par_first_print_halt_on_error_minus_1 perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ not\ shift 4 -par_first_print_halt_on_error_minus_1 parallel: Starting no more jobs. Waiting for 4 jobs to finish. -par_first_print_halt_on_error_minus_1 5 -par_first_print_halt_on_error_minus_1 parallel: This job succeeded: -par_first_print_halt_on_error_minus_1 perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ not\ shift 5 -par_first_print_halt_on_error_minus_1 parallel: Starting no more jobs. Waiting for 3 jobs to finish. -par_first_print_halt_on_error_minus_1 6 -par_first_print_halt_on_error_minus_1 parallel: This job succeeded: -par_first_print_halt_on_error_minus_1 perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ not\ shift 6 -par_first_print_halt_on_error_minus_1 parallel: Starting no more jobs. Waiting for 2 jobs to finish. -par_first_print_halt_on_error_minus_1 7 -par_first_print_halt_on_error_minus_1 0 -par_first_print_halt_on_error_minus_1 parallel: This job succeeded: -par_first_print_halt_on_error_minus_1 perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ not\ shift 7 -par_first_print_halt_on_error_minus_1 parallel: Starting no more jobs. Waiting for 1 jobs to finish. -par_first_print_halt_on_error_minus_1 8 -par_first_print_halt_on_error_minus_1 parallel: This job succeeded: -par_first_print_halt_on_error_minus_1 perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ not\ shift 8 -par_first_print_halt_on_error_minus_1 exit code 0 -par_first_print_halt_on_error_minus_2 ### Test last dying print --halt-on-error -2 -par_first_print_halt_on_error_minus_2 0 -par_first_print_halt_on_error_minus_2 parallel: This job succeeded: -par_first_print_halt_on_error_minus_2 perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ not\ shift 1 -par_first_print_halt_on_error_minus_2 exit code 0 -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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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_interactive ### Test -p --interactive par_interactive opt--interactive 1 par_interactive opt--interactive 3 @@ -273,10 +27,12 @@ par_interactive sleep 0.1; echo opt-p 2 ?...n par_interactive sleep 0.1; echo opt-p 3 ?...y par_interactive spawn /tmp/parallel-script-for-expect par_k ### Test -k -par_k parallel: Warning: Only enough file handles to run 8 jobs in parallel. -par_k parallel: Warning: Running 'parallel -j0 -N 8 --pipe parallel -j0' or +par_k parallel: Warning: Only enough file handles to run 9 jobs in parallel. +par_k parallel: Warning: Running 'parallel -j0 -N 9 --pipe parallel -j0' or par_k parallel: Warning: raising 'ulimit -n' or 'nofile' in /etc/security/limits.conf par_k parallel: Warning: or /proc/sys/fs/file-max may help. +par_k parallel: Warning: No more file handles. +par_k parallel: Warning: Raising ulimit -n or /etc/security/limits.conf may help. par_k begin par_k 1 par_k 2 @@ -556,10 +312,10 @@ par_results_compress 0 par_results_compress 1 par_results_csv bug #: --results csv par_results_csv --header : --tag --lb --files --compress Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,H2,H1,Stdout,Stderr -par_results_csv --header : --tag --lb --files --compress 1,:,999.999,999.999,0,31,0,0,"echo 22 11",22,11,"22 11 /tmp/parallel-local-10s-tmpdir/tmpfile", -par_results_csv --header : --tag --lb --files --compress 2,:,999.999,999.999,0,31,0,0,"echo 22 12",22,12,"22 12 /tmp/parallel-local-10s-tmpdir/tmpfile", -par_results_csv --header : --tag --lb --files --compress 3,:,999.999,999.999,0,31,0,0,"echo 23 11",23,11,"23 11 /tmp/parallel-local-10s-tmpdir/tmpfile", -par_results_csv --header : --tag --lb --files --compress 4,:,999.999,999.999,0,31,0,0,"echo 23 12",23,12,"23 12 /tmp/parallel-local-10s-tmpdir/tmpfile", +par_results_csv --header : --tag --lb --files --compress 1,:,999.999,999.999,0,15,0,0,"echo 22 11",22,11,"22 11 /tmp/parallel-local-10s-tmpdir/tmpfile", +par_results_csv --header : --tag --lb --files --compress 2,:,999.999,999.999,0,15,0,0,"echo 22 12",22,12,"22 12 /tmp/parallel-local-10s-tmpdir/tmpfile", +par_results_csv --header : --tag --lb --files --compress 3,:,999.999,999.999,0,15,0,0,"echo 23 11",23,11,"23 11 /tmp/parallel-local-10s-tmpdir/tmpfile", +par_results_csv --header : --tag --lb --files --compress 4,:,999.999,999.999,0,15,0,0,"echo 23 12",23,12,"23 12 /tmp/parallel-local-10s-tmpdir/tmpfile", par_results_csv --header : --tag --lb --files Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,H2,H1,Stdout,Stderr par_results_csv --header : --tag --lb --files 1,:,999.999,999.999,0,6,0,0,"echo 22 11",22,11,"22 11 /tmp/parallel-local-10s-tmpdir/tmpfile", par_results_csv --header : --tag --lb --files 2,:,999.999,999.999,0,6,0,0,"echo 22 12",22,12,"22 12 /tmp/parallel-local-10s-tmpdir/tmpfile", @@ -584,10 +340,10 @@ par_results_csv --header : --tag --lb ", par_results_csv --header : --tag --lb 4,:,999.999,999.999,0,6,0,0,"echo 23 12",23,12,"23 12 23 12 par_results_csv --header : --tag --lb ", par_results_csv --header : --tag --files --compress Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,H2,H1,Stdout,Stderr -par_results_csv --header : --tag --files --compress 1,:,999.999,999.999,0,31,0,0,"echo 22 11",22,11,"22 11 /tmp/parallel-local-10s-tmpdir/tmpfile", -par_results_csv --header : --tag --files --compress 2,:,999.999,999.999,0,31,0,0,"echo 22 12",22,12,"22 12 /tmp/parallel-local-10s-tmpdir/tmpfile", -par_results_csv --header : --tag --files --compress 3,:,999.999,999.999,0,31,0,0,"echo 23 11",23,11,"23 11 /tmp/parallel-local-10s-tmpdir/tmpfile", -par_results_csv --header : --tag --files --compress 4,:,999.999,999.999,0,31,0,0,"echo 23 12",23,12,"23 12 /tmp/parallel-local-10s-tmpdir/tmpfile", +par_results_csv --header : --tag --files --compress 1,:,999.999,999.999,0,15,0,0,"echo 22 11",22,11,"22 11 /tmp/parallel-local-10s-tmpdir/tmpfile", +par_results_csv --header : --tag --files --compress 2,:,999.999,999.999,0,15,0,0,"echo 22 12",22,12,"22 12 /tmp/parallel-local-10s-tmpdir/tmpfile", +par_results_csv --header : --tag --files --compress 3,:,999.999,999.999,0,15,0,0,"echo 23 11",23,11,"23 11 /tmp/parallel-local-10s-tmpdir/tmpfile", +par_results_csv --header : --tag --files --compress 4,:,999.999,999.999,0,15,0,0,"echo 23 12",23,12,"23 12 /tmp/parallel-local-10s-tmpdir/tmpfile", par_results_csv --header : --tag --files Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,H2,H1,Stdout,Stderr par_results_csv --header : --tag --files 1,:,999.999,999.999,0,6,0,0,"echo 22 11",22,11,"22 11 /tmp/parallel-local-10s-tmpdir/tmpfile", par_results_csv --header : --tag --files 2,:,999.999,999.999,0,6,0,0,"echo 22 12",22,12,"22 12 /tmp/parallel-local-10s-tmpdir/tmpfile", @@ -612,10 +368,10 @@ par_results_csv --header : --tag ", par_results_csv --header : --tag 4,:,999.999,999.999,0,6,0,0,"echo 23 12",23,12,"23 12 23 12 par_results_csv --header : --tag ", par_results_csv --header : --lb --files --compress Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,H2,H1,Stdout,Stderr -par_results_csv --header : --lb --files --compress 1,:,999.999,999.999,0,31,0,0,"echo 22 11",22,11,/tmp/parallel-local-10s-tmpdir/tmpfile, -par_results_csv --header : --lb --files --compress 2,:,999.999,999.999,0,31,0,0,"echo 22 12",22,12,/tmp/parallel-local-10s-tmpdir/tmpfile, -par_results_csv --header : --lb --files --compress 3,:,999.999,999.999,0,31,0,0,"echo 23 11",23,11,/tmp/parallel-local-10s-tmpdir/tmpfile, -par_results_csv --header : --lb --files --compress 4,:,999.999,999.999,0,31,0,0,"echo 23 12",23,12,/tmp/parallel-local-10s-tmpdir/tmpfile, +par_results_csv --header : --lb --files --compress 1,:,999.999,999.999,0,15,0,0,"echo 22 11",22,11,/tmp/parallel-local-10s-tmpdir/tmpfile, +par_results_csv --header : --lb --files --compress 2,:,999.999,999.999,0,15,0,0,"echo 22 12",22,12,/tmp/parallel-local-10s-tmpdir/tmpfile, +par_results_csv --header : --lb --files --compress 3,:,999.999,999.999,0,15,0,0,"echo 23 11",23,11,/tmp/parallel-local-10s-tmpdir/tmpfile, +par_results_csv --header : --lb --files --compress 4,:,999.999,999.999,0,15,0,0,"echo 23 12",23,12,/tmp/parallel-local-10s-tmpdir/tmpfile, par_results_csv --header : --lb --files Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,H2,H1,Stdout,Stderr par_results_csv --header : --lb --files 1,:,999.999,999.999,0,6,0,0,"echo 22 11",22,11,/tmp/parallel-local-10s-tmpdir/tmpfile, par_results_csv --header : --lb --files 2,:,999.999,999.999,0,6,0,0,"echo 22 12",22,12,/tmp/parallel-local-10s-tmpdir/tmpfile, @@ -640,10 +396,10 @@ par_results_csv --header : --lb ", par_results_csv --header : --lb 4,:,999.999,999.999,0,6,0,0,"echo 23 12",23,12,"23 12 par_results_csv --header : --lb ", par_results_csv --header : --files --compress Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,H2,H1,Stdout,Stderr -par_results_csv --header : --files --compress 1,:,999.999,999.999,0,31,0,0,"echo 22 11",22,11,/tmp/parallel-local-10s-tmpdir/tmpfile, -par_results_csv --header : --files --compress 2,:,999.999,999.999,0,31,0,0,"echo 22 12",22,12,/tmp/parallel-local-10s-tmpdir/tmpfile, -par_results_csv --header : --files --compress 3,:,999.999,999.999,0,31,0,0,"echo 23 11",23,11,/tmp/parallel-local-10s-tmpdir/tmpfile, -par_results_csv --header : --files --compress 4,:,999.999,999.999,0,31,0,0,"echo 23 12",23,12,/tmp/parallel-local-10s-tmpdir/tmpfile, +par_results_csv --header : --files --compress 1,:,999.999,999.999,0,15,0,0,"echo 22 11",22,11,/tmp/parallel-local-10s-tmpdir/tmpfile, +par_results_csv --header : --files --compress 2,:,999.999,999.999,0,15,0,0,"echo 22 12",22,12,/tmp/parallel-local-10s-tmpdir/tmpfile, +par_results_csv --header : --files --compress 3,:,999.999,999.999,0,15,0,0,"echo 23 11",23,11,/tmp/parallel-local-10s-tmpdir/tmpfile, +par_results_csv --header : --files --compress 4,:,999.999,999.999,0,15,0,0,"echo 23 12",23,12,/tmp/parallel-local-10s-tmpdir/tmpfile, par_results_csv --header : --files Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,H2,H1,Stdout,Stderr par_results_csv --header : --files 1,:,999.999,999.999,0,6,0,0,"echo 22 11",22,11,/tmp/parallel-local-10s-tmpdir/tmpfile, par_results_csv --header : --files 2,:,999.999,999.999,0,6,0,0,"echo 22 12",22,12,/tmp/parallel-local-10s-tmpdir/tmpfile, @@ -668,15 +424,15 @@ par_results_csv --header : ", par_results_csv --header : 4,:,999.999,999.999,0,6,0,0,"echo 23 12",23,12,"23 12 par_results_csv --header : ", par_results_csv --tag --lb --files --compress Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,V1,V2,Stdout,Stderr -par_results_csv --tag --lb --files --compress 1,:,999.999,999.999,0,31,0,0,"echo H2 H1",H2,H1,"H2 H1 /tmp/parallel-local-10s-tmpdir/tmpfile", -par_results_csv --tag --lb --files --compress 2,:,999.999,999.999,0,31,0,0,"echo H2 11",H2,11,"H2 11 /tmp/parallel-local-10s-tmpdir/tmpfile", -par_results_csv --tag --lb --files --compress 3,:,999.999,999.999,0,31,0,0,"echo H2 12",H2,12,"H2 12 /tmp/parallel-local-10s-tmpdir/tmpfile", -par_results_csv --tag --lb --files --compress 4,:,999.999,999.999,0,31,0,0,"echo 22 H1",22,H1,"22 H1 /tmp/parallel-local-10s-tmpdir/tmpfile", -par_results_csv --tag --lb --files --compress 5,:,999.999,999.999,0,31,0,0,"echo 22 11",22,11,"22 11 /tmp/parallel-local-10s-tmpdir/tmpfile", -par_results_csv --tag --lb --files --compress 6,:,999.999,999.999,0,31,0,0,"echo 22 12",22,12,"22 12 /tmp/parallel-local-10s-tmpdir/tmpfile", -par_results_csv --tag --lb --files --compress 7,:,999.999,999.999,0,31,0,0,"echo 23 H1",23,H1,"23 H1 /tmp/parallel-local-10s-tmpdir/tmpfile", -par_results_csv --tag --lb --files --compress 8,:,999.999,999.999,0,31,0,0,"echo 23 11",23,11,"23 11 /tmp/parallel-local-10s-tmpdir/tmpfile", -par_results_csv --tag --lb --files --compress 9,:,999.999,999.999,0,31,0,0,"echo 23 12",23,12,"23 12 /tmp/parallel-local-10s-tmpdir/tmpfile", +par_results_csv --tag --lb --files --compress 1,:,999.999,999.999,0,15,0,0,"echo H2 H1",H2,H1,"H2 H1 /tmp/parallel-local-10s-tmpdir/tmpfile", +par_results_csv --tag --lb --files --compress 2,:,999.999,999.999,0,15,0,0,"echo H2 11",H2,11,"H2 11 /tmp/parallel-local-10s-tmpdir/tmpfile", +par_results_csv --tag --lb --files --compress 3,:,999.999,999.999,0,15,0,0,"echo H2 12",H2,12,"H2 12 /tmp/parallel-local-10s-tmpdir/tmpfile", +par_results_csv --tag --lb --files --compress 4,:,999.999,999.999,0,15,0,0,"echo 22 H1",22,H1,"22 H1 /tmp/parallel-local-10s-tmpdir/tmpfile", +par_results_csv --tag --lb --files --compress 5,:,999.999,999.999,0,15,0,0,"echo 22 11",22,11,"22 11 /tmp/parallel-local-10s-tmpdir/tmpfile", +par_results_csv --tag --lb --files --compress 6,:,999.999,999.999,0,15,0,0,"echo 22 12",22,12,"22 12 /tmp/parallel-local-10s-tmpdir/tmpfile", +par_results_csv --tag --lb --files --compress 7,:,999.999,999.999,0,15,0,0,"echo 23 H1",23,H1,"23 H1 /tmp/parallel-local-10s-tmpdir/tmpfile", +par_results_csv --tag --lb --files --compress 8,:,999.999,999.999,0,15,0,0,"echo 23 11",23,11,"23 11 /tmp/parallel-local-10s-tmpdir/tmpfile", +par_results_csv --tag --lb --files --compress 9,:,999.999,999.999,0,15,0,0,"echo 23 12",23,12,"23 12 /tmp/parallel-local-10s-tmpdir/tmpfile", par_results_csv --tag --lb --files Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,V1,V2,Stdout,Stderr par_results_csv --tag --lb --files 1,:,999.999,999.999,0,6,0,0,"echo H2 H1",H2,H1,"H2 H1 /tmp/parallel-local-10s-tmpdir/tmpfile", par_results_csv --tag --lb --files 2,:,999.999,999.999,0,6,0,0,"echo H2 11",H2,11,"H2 11 /tmp/parallel-local-10s-tmpdir/tmpfile", @@ -726,15 +482,15 @@ par_results_csv --tag --lb ", par_results_csv --tag --lb 9,:,999.999,999.999,0,6,0,0,"echo 23 12",23,12,"23 12 23 12 par_results_csv --tag --lb ", par_results_csv --tag --files --compress Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,V1,V2,Stdout,Stderr -par_results_csv --tag --files --compress 1,:,999.999,999.999,0,31,0,0,"echo H2 H1",H2,H1,"H2 H1 /tmp/parallel-local-10s-tmpdir/tmpfile", -par_results_csv --tag --files --compress 2,:,999.999,999.999,0,31,0,0,"echo H2 11",H2,11,"H2 11 /tmp/parallel-local-10s-tmpdir/tmpfile", -par_results_csv --tag --files --compress 3,:,999.999,999.999,0,31,0,0,"echo H2 12",H2,12,"H2 12 /tmp/parallel-local-10s-tmpdir/tmpfile", -par_results_csv --tag --files --compress 4,:,999.999,999.999,0,31,0,0,"echo 22 H1",22,H1,"22 H1 /tmp/parallel-local-10s-tmpdir/tmpfile", -par_results_csv --tag --files --compress 5,:,999.999,999.999,0,31,0,0,"echo 22 11",22,11,"22 11 /tmp/parallel-local-10s-tmpdir/tmpfile", -par_results_csv --tag --files --compress 6,:,999.999,999.999,0,31,0,0,"echo 22 12",22,12,"22 12 /tmp/parallel-local-10s-tmpdir/tmpfile", -par_results_csv --tag --files --compress 7,:,999.999,999.999,0,31,0,0,"echo 23 H1",23,H1,"23 H1 /tmp/parallel-local-10s-tmpdir/tmpfile", -par_results_csv --tag --files --compress 8,:,999.999,999.999,0,31,0,0,"echo 23 11",23,11,"23 11 /tmp/parallel-local-10s-tmpdir/tmpfile", -par_results_csv --tag --files --compress 9,:,999.999,999.999,0,31,0,0,"echo 23 12",23,12,"23 12 /tmp/parallel-local-10s-tmpdir/tmpfile", +par_results_csv --tag --files --compress 1,:,999.999,999.999,0,15,0,0,"echo H2 H1",H2,H1,"H2 H1 /tmp/parallel-local-10s-tmpdir/tmpfile", +par_results_csv --tag --files --compress 2,:,999.999,999.999,0,15,0,0,"echo H2 11",H2,11,"H2 11 /tmp/parallel-local-10s-tmpdir/tmpfile", +par_results_csv --tag --files --compress 3,:,999.999,999.999,0,15,0,0,"echo H2 12",H2,12,"H2 12 /tmp/parallel-local-10s-tmpdir/tmpfile", +par_results_csv --tag --files --compress 4,:,999.999,999.999,0,15,0,0,"echo 22 H1",22,H1,"22 H1 /tmp/parallel-local-10s-tmpdir/tmpfile", +par_results_csv --tag --files --compress 5,:,999.999,999.999,0,15,0,0,"echo 22 11",22,11,"22 11 /tmp/parallel-local-10s-tmpdir/tmpfile", +par_results_csv --tag --files --compress 6,:,999.999,999.999,0,15,0,0,"echo 22 12",22,12,"22 12 /tmp/parallel-local-10s-tmpdir/tmpfile", +par_results_csv --tag --files --compress 7,:,999.999,999.999,0,15,0,0,"echo 23 H1",23,H1,"23 H1 /tmp/parallel-local-10s-tmpdir/tmpfile", +par_results_csv --tag --files --compress 8,:,999.999,999.999,0,15,0,0,"echo 23 11",23,11,"23 11 /tmp/parallel-local-10s-tmpdir/tmpfile", +par_results_csv --tag --files --compress 9,:,999.999,999.999,0,15,0,0,"echo 23 12",23,12,"23 12 /tmp/parallel-local-10s-tmpdir/tmpfile", par_results_csv --tag --files Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,V1,V2,Stdout,Stderr par_results_csv --tag --files 1,:,999.999,999.999,0,6,0,0,"echo H2 H1",H2,H1,"H2 H1 /tmp/parallel-local-10s-tmpdir/tmpfile", par_results_csv --tag --files 2,:,999.999,999.999,0,6,0,0,"echo H2 11",H2,11,"H2 11 /tmp/parallel-local-10s-tmpdir/tmpfile", @@ -784,15 +540,15 @@ par_results_csv --tag ", par_results_csv --tag 9,:,999.999,999.999,0,6,0,0,"echo 23 12",23,12,"23 12 23 12 par_results_csv --tag ", par_results_csv --lb --files --compress Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,V1,V2,Stdout,Stderr -par_results_csv --lb --files --compress 1,:,999.999,999.999,0,31,0,0,"echo H2 H1",H2,H1,/tmp/parallel-local-10s-tmpdir/tmpfile, -par_results_csv --lb --files --compress 2,:,999.999,999.999,0,31,0,0,"echo H2 11",H2,11,/tmp/parallel-local-10s-tmpdir/tmpfile, -par_results_csv --lb --files --compress 3,:,999.999,999.999,0,31,0,0,"echo H2 12",H2,12,/tmp/parallel-local-10s-tmpdir/tmpfile, -par_results_csv --lb --files --compress 4,:,999.999,999.999,0,31,0,0,"echo 22 H1",22,H1,/tmp/parallel-local-10s-tmpdir/tmpfile, -par_results_csv --lb --files --compress 5,:,999.999,999.999,0,31,0,0,"echo 22 11",22,11,/tmp/parallel-local-10s-tmpdir/tmpfile, -par_results_csv --lb --files --compress 6,:,999.999,999.999,0,31,0,0,"echo 22 12",22,12,/tmp/parallel-local-10s-tmpdir/tmpfile, -par_results_csv --lb --files --compress 7,:,999.999,999.999,0,31,0,0,"echo 23 H1",23,H1,/tmp/parallel-local-10s-tmpdir/tmpfile, -par_results_csv --lb --files --compress 8,:,999.999,999.999,0,31,0,0,"echo 23 11",23,11,/tmp/parallel-local-10s-tmpdir/tmpfile, -par_results_csv --lb --files --compress 9,:,999.999,999.999,0,31,0,0,"echo 23 12",23,12,/tmp/parallel-local-10s-tmpdir/tmpfile, +par_results_csv --lb --files --compress 1,:,999.999,999.999,0,15,0,0,"echo H2 H1",H2,H1,/tmp/parallel-local-10s-tmpdir/tmpfile, +par_results_csv --lb --files --compress 2,:,999.999,999.999,0,15,0,0,"echo H2 11",H2,11,/tmp/parallel-local-10s-tmpdir/tmpfile, +par_results_csv --lb --files --compress 3,:,999.999,999.999,0,15,0,0,"echo H2 12",H2,12,/tmp/parallel-local-10s-tmpdir/tmpfile, +par_results_csv --lb --files --compress 4,:,999.999,999.999,0,15,0,0,"echo 22 H1",22,H1,/tmp/parallel-local-10s-tmpdir/tmpfile, +par_results_csv --lb --files --compress 5,:,999.999,999.999,0,15,0,0,"echo 22 11",22,11,/tmp/parallel-local-10s-tmpdir/tmpfile, +par_results_csv --lb --files --compress 6,:,999.999,999.999,0,15,0,0,"echo 22 12",22,12,/tmp/parallel-local-10s-tmpdir/tmpfile, +par_results_csv --lb --files --compress 7,:,999.999,999.999,0,15,0,0,"echo 23 H1",23,H1,/tmp/parallel-local-10s-tmpdir/tmpfile, +par_results_csv --lb --files --compress 8,:,999.999,999.999,0,15,0,0,"echo 23 11",23,11,/tmp/parallel-local-10s-tmpdir/tmpfile, +par_results_csv --lb --files --compress 9,:,999.999,999.999,0,15,0,0,"echo 23 12",23,12,/tmp/parallel-local-10s-tmpdir/tmpfile, par_results_csv --lb --files Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,V1,V2,Stdout,Stderr par_results_csv --lb --files 1,:,999.999,999.999,0,6,0,0,"echo H2 H1",H2,H1,/tmp/parallel-local-10s-tmpdir/tmpfile, par_results_csv --lb --files 2,:,999.999,999.999,0,6,0,0,"echo H2 11",H2,11,/tmp/parallel-local-10s-tmpdir/tmpfile, @@ -842,15 +598,15 @@ par_results_csv --lb ", par_results_csv --lb 9,:,999.999,999.999,0,6,0,0,"echo 23 12",23,12,"23 12 par_results_csv --lb ", par_results_csv --files --compress Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,V1,V2,Stdout,Stderr -par_results_csv --files --compress 1,:,999.999,999.999,0,31,0,0,"echo H2 H1",H2,H1,/tmp/parallel-local-10s-tmpdir/tmpfile, -par_results_csv --files --compress 2,:,999.999,999.999,0,31,0,0,"echo H2 11",H2,11,/tmp/parallel-local-10s-tmpdir/tmpfile, -par_results_csv --files --compress 3,:,999.999,999.999,0,31,0,0,"echo H2 12",H2,12,/tmp/parallel-local-10s-tmpdir/tmpfile, -par_results_csv --files --compress 4,:,999.999,999.999,0,31,0,0,"echo 22 H1",22,H1,/tmp/parallel-local-10s-tmpdir/tmpfile, -par_results_csv --files --compress 5,:,999.999,999.999,0,31,0,0,"echo 22 11",22,11,/tmp/parallel-local-10s-tmpdir/tmpfile, -par_results_csv --files --compress 6,:,999.999,999.999,0,31,0,0,"echo 22 12",22,12,/tmp/parallel-local-10s-tmpdir/tmpfile, -par_results_csv --files --compress 7,:,999.999,999.999,0,31,0,0,"echo 23 H1",23,H1,/tmp/parallel-local-10s-tmpdir/tmpfile, -par_results_csv --files --compress 8,:,999.999,999.999,0,31,0,0,"echo 23 11",23,11,/tmp/parallel-local-10s-tmpdir/tmpfile, -par_results_csv --files --compress 9,:,999.999,999.999,0,31,0,0,"echo 23 12",23,12,/tmp/parallel-local-10s-tmpdir/tmpfile, +par_results_csv --files --compress 1,:,999.999,999.999,0,15,0,0,"echo H2 H1",H2,H1,/tmp/parallel-local-10s-tmpdir/tmpfile, +par_results_csv --files --compress 2,:,999.999,999.999,0,15,0,0,"echo H2 11",H2,11,/tmp/parallel-local-10s-tmpdir/tmpfile, +par_results_csv --files --compress 3,:,999.999,999.999,0,15,0,0,"echo H2 12",H2,12,/tmp/parallel-local-10s-tmpdir/tmpfile, +par_results_csv --files --compress 4,:,999.999,999.999,0,15,0,0,"echo 22 H1",22,H1,/tmp/parallel-local-10s-tmpdir/tmpfile, +par_results_csv --files --compress 5,:,999.999,999.999,0,15,0,0,"echo 22 11",22,11,/tmp/parallel-local-10s-tmpdir/tmpfile, +par_results_csv --files --compress 6,:,999.999,999.999,0,15,0,0,"echo 22 12",22,12,/tmp/parallel-local-10s-tmpdir/tmpfile, +par_results_csv --files --compress 7,:,999.999,999.999,0,15,0,0,"echo 23 H1",23,H1,/tmp/parallel-local-10s-tmpdir/tmpfile, +par_results_csv --files --compress 8,:,999.999,999.999,0,15,0,0,"echo 23 11",23,11,/tmp/parallel-local-10s-tmpdir/tmpfile, +par_results_csv --files --compress 9,:,999.999,999.999,0,15,0,0,"echo 23 12",23,12,/tmp/parallel-local-10s-tmpdir/tmpfile, par_results_csv --files Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,V1,V2,Stdout,Stderr par_results_csv --files 1,:,999.999,999.999,0,6,0,0,"echo H2 H1",H2,H1,/tmp/parallel-local-10s-tmpdir/tmpfile, par_results_csv --files 2,:,999.999,999.999,0,6,0,0,"echo H2 11",H2,11,/tmp/parallel-local-10s-tmpdir/tmpfile, diff --git a/testsuite/wanted-results/parallel-local-30s b/testsuite/wanted-results/parallel-local-30s index b03f15b0..20db9332 100644 --- a/testsuite/wanted-results/parallel-local-30s +++ b/testsuite/wanted-results/parallel-local-30s @@ -1,6 +1,4 @@ par_linebuffer_matters_compress ### (--linebuffer) --compress should give different output -par_linebuffer_matters_compress environment: line 8: warning: command substitution: ignored null byte in input -par_linebuffer_matters_compress environment: line 11: warning: command substitution: ignored null byte in input par_linebuffer_matters_compress OK: --linebuffer makes a difference par_linebuffer_matters_compress_tag ### (--linebuffer) --compress --tag should give different output par_linebuffer_matters_compress_tag OK: --linebuffer makes a difference diff --git a/testsuite/wanted-results/parallel-local-race02 b/testsuite/wanted-results/parallel-local-race02 index e168d4c3..1b83a881 100644 --- a/testsuite/wanted-results/parallel-local-race02 +++ b/testsuite/wanted-results/parallel-local-race02 @@ -2,14 +2,14 @@ bug #46120: Suspend should suspend (at least local) children it should burn 1.9 CPU seconds, but no more than that The 5 second sleep will make it be killed by timeout when it fgs -stdout /usr/bin/time -f CPUTIME=%U parallel --timeout 5 -q perl -e "while(1){ }" ::: 1 | grep --color=auto -q CPUTIME=1 +stdout /usr/bin/time -f CPUTIME=%U parallel --timeout 5 -q perl -e "while(1){ }" ::: 1 | grep -q CPUTIME=1 Zero=OK 0 -echo 1 | stdout /usr/bin/time -f CPUTIME=%U parallel --timeout 5 -q perl -e "while(1){ }" | grep --color=auto -q CPUTIME=1 +echo 1 | stdout /usr/bin/time -f CPUTIME=%U parallel --timeout 5 -q perl -e "while(1){ }" | grep -q CPUTIME=1 Zero=OK 0 Control case: Burn for 2.9 seconds -stdout /usr/bin/time -f CPUTIME=%U parallel --timeout 5 -q perl -e "while(1){ }" ::: 1 | grep --color=auto -q CPUTIME=1 +stdout /usr/bin/time -f CPUTIME=%U parallel --timeout 5 -q perl -e "while(1){ }" ::: 1 | grep -q CPUTIME=1 1=OK 1 par_hostgroup ### --hostgroup force ncpu par_hostgroup parallel @@ -23,7 +23,7 @@ par_hostgroup tange par_hostgroup ### --hostgroup two group arg par_hostgroup parallel par_hostgroup parallel -par_hostgroup parallel +par_hostgroup tange par_hostgroup tange par_hostgroup tange par_hostgroup tange @@ -41,7 +41,7 @@ par_hostgroup tange par_hostgroup ### --hostgroup multiple group arg + unused group par_hostgroup parallel par_hostgroup parallel -par_hostgroup parallel +par_hostgroup tange par_hostgroup tange par_hostgroup tange par_hostgroup tange @@ -62,21 +62,21 @@ par_hostgroup implicit_group par_hostgroup ### --hostgroup -S @group par_hostgroup tange par_hostgroup tange -par_hostgroup tcsh +par_hostgroup tange par_hostgroup tcsh par_hostgroup tcsh par_hostgroup tcsh par_hostgroup ### --hostgroup -S @group1 -Sgrp2 par_hostgroup parallel par_hostgroup parallel -par_hostgroup parallel +par_hostgroup tange par_hostgroup tange par_hostgroup tcsh par_hostgroup tcsh par_hostgroup ### --hostgroup -S @group1+grp2 par_hostgroup parallel par_hostgroup parallel -par_hostgroup parallel +par_hostgroup tange par_hostgroup tange par_hostgroup tcsh par_hostgroup tcsh @@ -1196,9 +1196,6 @@ par_testhalt soon done 0 false echo job 2; sleep 0.9; exit 0 par_testhalt soon done 0 false job 3 par_testhalt soon done 0 false parallel: This job finished: par_testhalt soon done 0 false echo job 3; sleep 1.2; exit 0 -par_testhalt soon done 0 false job 4 -par_testhalt soon done 0 false parallel: This job finished: -par_testhalt soon done 0 false echo job 4; sleep 1.5; exit 0 par_testhalt soon done 0 false 0 par_testhalt soon done 1 true ### testhalt --halt soon,done=1 par_testhalt soon done 1 true job 1 @@ -1224,9 +1221,6 @@ par_testhalt soon done 1 false echo job 2; sleep 0.9; exit 0 par_testhalt soon done 1 false job 3 par_testhalt soon done 1 false parallel: This job finished: par_testhalt soon done 1 false echo job 3; sleep 1.2; exit 0 -par_testhalt soon done 1 false job 4 -par_testhalt soon done 1 false parallel: This job finished: -par_testhalt soon done 1 false echo job 4; sleep 1.5; exit 0 par_testhalt soon done 1 false 0 par_testhalt soon done 2 true ### testhalt --halt soon,done=2 par_testhalt soon done 2 true job 1 diff --git a/testsuite/wanted-results/parallel-local-ssh5 b/testsuite/wanted-results/parallel-local-ssh5 index 7952181a..3dd3e1f8 100644 --- a/testsuite/wanted-results/parallel-local-ssh5 +++ b/testsuite/wanted-results/parallel-local-ssh5 @@ -34,7 +34,7 @@ Environment variables are: stderr rsync: connection unexpectedly closed (0 bytes received so far) [sender] -rsync error: error in rsync protocol data stream (code 12) at io.c(235) [sender=3.1.2] +rsync error: error in rsync protocol data stream (code 12) at io.c(226) [sender=3.1.1] /usr/lib/autossh/autossh: invalid option -- '-' usage: autossh [-V] [-M monitor_port[:echo_port]] [-f] [SSH_OPTIONS] @@ -66,7 +66,7 @@ Environment variables are: stderr rsync: connection unexpectedly closed (0 bytes received so far) [Receiver] -rsync error: error in rsync protocol data stream (code 12) at io.c(235) [Receiver=3.1.2] +rsync error: error in rsync protocol data stream (code 12) at io.c(226) [Receiver=3.1.1] echo '### bug #46520: --basefile cleans up without --cleanup' ### bug #46520: --basefile cleans up without --cleanup touch bug_46520; parallel -S parallel@lo --bf bug_46520 ls ::: bug_46520; ssh parallel@lo ls bug_46520; parallel -S parallel@lo --cleanup --bf bug_46520 ls ::: bug_46520; stdout ssh parallel@lo ls bug_46520 # should not exist diff --git a/testsuite/wanted-results/parallel-local-ssh7 b/testsuite/wanted-results/parallel-local-ssh7 index 6c2219dd..cce9b414 100644 --- a/testsuite/wanted-results/parallel-local-ssh7 +++ b/testsuite/wanted-results/parallel-local-ssh7 @@ -40,8 +40,6 @@ par_bash_environment_too_big OK par_bash_environment_too_big OK par_bash_environment_too_big OK par_bash_environment_too_big OK -par_bash_environment_too_big OK -par_bash_environment_too_big OK par_bash_environment_too_big /usr/local/bin/env_parallel.bash: line 168: /usr/bin/which: Argument list too long par_bash_environment_too_big env_parallel: Error: Your environment is too big. par_bash_environment_too_big env_parallel: Error: Try running this in a clean environment once: @@ -79,11 +77,13 @@ par_bash_environment_too_big env_parallel: Error: env_parallel --record-env par_bash_environment_too_big env_parallel: Error: And the use '--env _' par_bash_environment_too_big env_parallel: Error: For details see: man env_parallel par_bash_funky +par_bash_funky +par_bash_funky par_bash_funky \\\\\\\\ par_bash_funky  par_bash_funky  -par_bash_funky -funkymultiline -par_bash_funky -funkymultiline +par_bash_funky +par_bash_funky par_bash_funky space 6 par_bash_funky space 6 par_bash_funky 3 arg alias_works @@ -100,6 +100,8 @@ par_bash_funky function_works par_bash_funky function_works_over_ssh par_bash_funky myvar works par_bash_funky myvar works +par_bash_funky -funkymultiline +par_bash_funky -funkymultiline par_bash_man ### bash par_bash_man ### From man env_parallel par_bash_man aliases work @@ -137,21 +139,21 @@ par_bash_underscore variables in aliases in and arrays in functions work par_bash_underscore variables in aliases in and arrays in functions work par_bash_underscore variables in aliases in and arrays in functions work par_bash_underscore variables in aliases in and arrays in functions work -par_bash_underscore /bin/bash: line 57: not_copied_alias: command not found -par_bash_underscore /bin/bash: line 57: not_copied_func: command not found +par_bash_underscore /bin/bash: line 56: not_copied_alias: command not found +par_bash_underscore /bin/bash: line 56: not_copied_func: command not found par_bash_underscore error=OK par_bash_underscore error=OK par_bash_underscore aliases in and arrays in functions work par_bash_underscore aliases in and arrays in functions work par_bash_underscore aliases in functions work par_bash_underscore aliases in functions work -par_bash_underscore environment: line 51: myecho: command not found +par_bash_underscore /bin/bash: line 49: myecho: command not found par_bash_underscore OK if no myecho ^^^^^^^^^^^^^^^^^^^^^^^^^ -par_bash_underscore environment: line 51: myecho: command not found +par_bash_underscore /bin/bash: line 49: myecho: command not found par_bash_underscore OK if no myecho ^^^^^^^^^^^^^^^^^^^^^^^^^ -par_bash_underscore /bin/bash: line 50: myfunc: command not found +par_bash_underscore /bin/bash: line 49: myfunc: command not found par_bash_underscore OK if no myfunc ^^^^^^^^^^^^^^^^^^^^^^^^^ -par_bash_underscore /bin/bash: line 50: myfunc: command not found +par_bash_underscore /bin/bash: line 49: myfunc: command not found par_bash_underscore OK if no myfunc ^^^^^^^^^^^^^^^^^^^^^^^^^ par_csh_env_parallel_fifo bug #50435: Remote fifo broke in 20150522 par_csh_env_parallel_fifo data from stdin @@ -540,7 +542,7 @@ par_tcsh_funky par_tcsh_funky 3 arg alias_works par_tcsh_funky 3 arg alias_works_over_ssh par_tcsh_funky Funky-  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~-funky alias_var_works -par_tcsh_funky Funky-  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ-funky alias_var_works_over_ssh +par_tcsh_funky Funky-  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~-funky alias_var_works_over_ssh par_tcsh_funky \\\\\\\\ \ \ \ \ \\\\\\\\\\\\\\ \!\"\#\$%\&\'\(\)\*+,-./0123456789:\;\<\=\>\?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]\^_\`abcdefghijklmnopqrstuvwxyz\{\|\}\~\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ par_tcsh_funky func_echo: Command not found. par_tcsh_funky func_echo: Command not found. diff --git a/testsuite/wanted-results/parallel-local-ssh8 b/testsuite/wanted-results/parallel-local-ssh8 index 38df203c..80139c22 100644 --- a/testsuite/wanted-results/parallel-local-ssh8 +++ b/testsuite/wanted-results/parallel-local-ssh8 @@ -9,7 +9,6 @@ par_keeporder job2 par_load_csh ### Gave Word too long. par_load_csh a par_path_remote_bash bug #47695: How to set $PATH on remote? Bash -par_path_remote_bash par_path_remote_bash BASH Path before: /bin:/usr/bin with no parallel par_path_remote_bash -bash: line 2: parallel: command not found par_path_remote_bash ^^^^^^^^ Not found is OK diff --git a/testsuite/wanted-results/parallel-local12 b/testsuite/wanted-results/parallel-local12 index 6c3125c8..85475fc4 100644 --- a/testsuite/wanted-results/parallel-local12 +++ b/testsuite/wanted-results/parallel-local12 @@ -35,7 +35,7 @@ If you pay 10000 EUR you should feel free to use GNU Parallel without citing. To silence this citation notice: run 'parallel --citation'. 10 files to edit -[?1049h[?1h=[?12;25h[?12l[?25h[?25l"file1" [New File]~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ [?12l[?25h[?25lE173: 9 more files to edit[?12l[?25h[?1l>[?1049lAcademic tradition requires you to cite works you base your article on. +[?1049h[?1h=[?12;25h[?12l[?25h[?25l"file1" [New File]~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ [?12l[?25h[?25lE173: 9 more files to edit[?12l[?25h[?1l>[?1049lAcademic tradition requires you to cite works you base your article on. If you use programs that use GNU Parallel to process data for an article in a scientific publication, please cite: diff --git a/testsuite/wanted-results/parallel-local150 b/testsuite/wanted-results/parallel-local150 index 9c8234d2..c04db525 100644 --- a/testsuite/wanted-results/parallel-local150 +++ b/testsuite/wanted-results/parallel-local150 @@ -146,8 +146,8 @@ echo '### Test make .deb package'; cd ~/privat/parallel/packager/debian; std To install the GNU Parallel Debian package, run: echo '### Test of segfaulting issue' ### Test of segfaulting issue - echo 'This gave ~/bin/stdout: line 3: 20374 Segmentation fault "$@" 2>&1'; echo 'before adding wait() before exit'; seq 1 300 | stdout parallel ./trysegfault -This gave ~/bin/stdout: line 3: 20374 Segmentation fault "$@" 2>&1 + echo 'This gave /home/tange/bin/stdout: line 3: 20374 Segmentation fault "$@" 2>&1'; echo 'before adding wait() before exit'; seq 1 300 | stdout parallel ./trysegfault +This gave /home/tange/bin/stdout: line 3: 20374 Segmentation fault "$@" 2>&1 before adding wait() before exit echo '### Test basic --arg-sep' ### Test basic --arg-sep diff --git a/testsuite/wanted-results/parallel-local18 b/testsuite/wanted-results/parallel-local18 index d26bdeb1..e7dc95bf 100644 --- a/testsuite/wanted-results/parallel-local18 +++ b/testsuite/wanted-results/parallel-local18 @@ -7,8 +7,6 @@ par_env_newline_backslash_bash 8 par_env_newline_backslash_csh ### Test --env for \n and \\ - single and double (*csh only) - no output is good but csh fails par_env_newline_backslash_csh 2 2\ \92V2=\ \92 par_env_newline_backslash_csh 2 2\\ \92V2=\\ \92 -par_env_newline_backslash_csh 2 Unmatched ". -par_env_newline_backslash_csh 2 Unmatched '"'. par_env_newline_backslash_onall_bash ### Test --env for \n and \\ - single and double --onall (bash only) - no output is good par_env_newline_backslash_onall_bash 16 par_env_newline_backslash_onall_bash 16 @@ -17,6 +15,7 @@ par_env_newline_backslash_onall_bash 8 10 par_env_newline_backslash_onall_bash 8 10V2= par_env_newline_backslash_onall_bash 8 2\\ \92V2=\\ \92 par_env_newline_backslash_onall_csh ### Test --env for \n and \\ - single and double --onall (*csh only) - no output is good but csh fails +par_env_newline_backslash_onall_csh 8 Unmatched ". par_space ### Test --env - https://savannah.gnu.org/bugs/?37351 par_space a 2 spaces b 1 par_space a 2 spaces b 1 diff --git a/testsuite/wanted-results/parallel-local9 b/testsuite/wanted-results/parallel-local9 index e8941d2c..f1271cc8 100644 --- a/testsuite/wanted-results/parallel-local9 +++ b/testsuite/wanted-results/parallel-local9 @@ -63,7 +63,7 @@ echo '### Test --number-of-cpus'; stdout $NICEPAR --number-of-cpus 1 echo '### Test --number-of-cores'; stdout $NICEPAR --number-of-cores ### Test --number-of-cores -2 +8 echo '### Test --use-cpus-instead-of-cores'; (seq 1 8 | stdout parallel --use-cpus-instead-of-cores -j100% sleep) && echo CPUs done & (seq 1 8 | stdout parallel -j100% sleep) && echo cores done & echo 'Cores should complete first on machines with less than 8 physical CPUs'; wait ### Test --use-cpus-instead-of-cores Cores should complete first on machines with less than 8 physical CPUs diff --git a/testsuite/wanted-results/parallel-tutorial b/testsuite/wanted-results/parallel-tutorial index 2f43fb65..e542b65e 100644 --- a/testsuite/wanted-results/parallel-tutorial +++ b/testsuite/wanted-results/parallel-tutorial @@ -979,6 +979,21 @@ For details: see man env_parallel parallel -vv --workdir ... --nice 17 --env _ --trc {}.out \ -S $SERVER1 my_func3 {} ::: abc-file ssh -l parallel lo -- mkdir -p ./.TMPWORKDIR && rsync --protocol 30 -rlDzR -essh\ -l\ parallel ./abc-file lo:./.TMPWORKDIR;ssh -l parallel lo -- exec perl -e @GNU_Parallel\\\=split/_/,\\\"use_IPC::Open3\\\;_use_MIME::Base64\\\"\\\;eval\\\"@GNU_Parallel\\\"\\\;\\\$chld\\\=\\\$SIG\\\{CHLD\\\}\\\;\\\$SIG\\\{CHLD\\\}\\\=\\\"IGNORE\\\"\\\;my\\\$zip\\\=\\\(grep\\\{-x\\\$_\\\}\\\"/usr/local/bin/bzip2\\\"\\\)\\\[0\\\]\\\|\\\|\\\"bzip2\\\"\\\;open3\\\(\\\$in,\\\$out,\\\"\\\>\\\&STDERR\\\",\\\$zip,\\\"-dc\\\"\\\)\\\;if\\\(my\\\$perlpid\\\=fork\\\)\\\{close\\\$in\\\;\\\$eval\\\=join\\\"\\\",\\\<\\\$out\\\>\\\;close\\\$out\\\;\\\}else\\\{close\\\$out\\\;print\\\$in\\\(decode_base64\\\(join\\\"\\\",@ARGV\\\)\\\)\\\;close\\\$in\\\;exit\\\;\\\}wait\\\;\\\$SIG\\\{CHLD\\\}\\\=\\\$chld\\\;eval\\\$eval\\\; BASE64;_EXIT_status=$?; mkdir -p ./. && rsync --protocol 30 --rsync-path=cd\ ./.TMPWORKDIR/./.\;\ rsync -rlDzR -essh\ -l\ parallel lo:./abc-file.out ./.;ssh -l parallel lo -- rm\ -f\ ./.TMPWORKDIR/abc-file\;\ sh\ -c\ rmdir\\\ ./.TMPWORKDIR/\\\ ./.parallel/tmp/\\\ ./.parallel/\\\ 2\\\>/dev/null\\\;rm\\\ -rf\\\ ./.TMPWORKDIR\\\;;ssh -l parallel lo -- rm\ -f\ ./.TMPWORKDIR/abc-file.out\;\ sh\ -c\ rmdir\\\ ./.TMPWORKDIR/\\\ ./.parallel/tmp/\\\ ./.parallel/\\\ 2\\\>/dev/null\\\;rm\\\ -rf\\\ ./.TMPWORKDIR\\\;;ssh -l parallel lo -- rm -rf .TMPWORKDIR; exit $_EXIT_status; + parset myvar1,myvar2 echo ::: a b + echo $myvar1 + echo $myvar2 + +/bin/bash: parset: command not found + parset myarray seq {} 5 ::: 1 2 3 + echo "${myarray[1]}" + +/bin/bash: parset: command not found + cmd=("echo '<>'" "pwd") + parset data ::: "${cmd[@]}" + echo "${data[0]}" + echo "${data[1]}" + +/bin/bash: line 1: parset: command not found parallel --sqlandworker csv:////%2Ftmp%2Flog.csv \ seq ::: 10 ::: 12 13 14 cat /tmp/log.csv @@ -1298,8 +1313,8 @@ With --plus: {} = {+/}/{/} = {.}.{+.} = {+/}/{/.}.{+.} = {..}.{+..} = See 'man parallel' for details Academic tradition requires you to cite works you base your article on. -When using programs that use GNU Parallel to process data for publication -please cite: +If you use programs that use GNU Parallel to process data for an article in a +scientific publication, please cite: O. Tange (2011): GNU Parallel - The Command-Line Power Tool, ;login: The USENIX Magazine, February 2011:42-47. @@ -1325,8 +1340,8 @@ VERSION Your version is at least VERSION. parallel --citation Academic tradition requires you to cite works you base your article on. -When using programs that use GNU Parallel to process data for publication -please cite: +If you use programs that use GNU Parallel to process data for an article in a +scientific publication, please cite: @article{Tange2011a, title = {GNU Parallel - The Command-Line Power Tool},