Released as 20200822 ('Beirut')

This commit is contained in:
Ole Tange 2020-08-23 01:31:39 +02:00
parent 19cd8e015f
commit 5ea74055dd
32 changed files with 246 additions and 314 deletions

10
NEWS
View file

@ -1,3 +1,13 @@
20200822
New in this release:
* Max command line length is changed for MacOS - making this version
beta quality for MacOS.
* Bug fixes and man page updates.
20200722
New in this release:

24
README
View file

@ -57,11 +57,11 @@ document.
Full installation of GNU Parallel is as simple as:
wget https://ftpmirror.gnu.org/parallel/parallel-20200722.tar.bz2
wget https://ftpmirror.gnu.org/parallel/parallel-20200722.tar.bz2.sig
gpg parallel-20200722.tar.bz2.sig
bzip2 -dc parallel-20200722.tar.bz2 | tar xvf -
cd parallel-20200722
wget https://ftpmirror.gnu.org/parallel/parallel-20200822.tar.bz2
wget https://ftpmirror.gnu.org/parallel/parallel-20200822.tar.bz2.sig
gpg parallel-20200822.tar.bz2.sig
bzip2 -dc parallel-20200822.tar.bz2 | tar xvf -
cd parallel-20200822
./configure && make && sudo make install
@ -70,11 +70,11 @@ Full installation of GNU Parallel is as simple as:
If you are not root you can add ~/bin to your path and install in
~/bin and ~/share:
wget https://ftpmirror.gnu.org/parallel/parallel-20200722.tar.bz2
wget https://ftpmirror.gnu.org/parallel/parallel-20200722.tar.bz2.sig
gpg parallel-20200722.tar.bz2.sig
bzip2 -dc parallel-20200722.tar.bz2 | tar xvf -
cd parallel-20200722
wget https://ftpmirror.gnu.org/parallel/parallel-20200822.tar.bz2
wget https://ftpmirror.gnu.org/parallel/parallel-20200822.tar.bz2.sig
gpg parallel-20200822.tar.bz2.sig
bzip2 -dc parallel-20200822.tar.bz2 | tar xvf -
cd parallel-20200822
./configure --prefix=$HOME && make && make install
Or if your system lacks 'make' you can simply copy src/parallel
@ -122,8 +122,8 @@ will love you for it.
When using programs that use GNU Parallel to process data for
publication please cite:
Tange, O. (2020, July 22). GNU Parallel 20200722 ('Privacy Shield').
Zenodo. https://doi.org/10.5281/zenodo.3956817
Tange, O. (2020, August 22). GNU Parallel 20200822 ('Beirut').
Zenodo. https://doi.org/10.5281/zenodo.3996295
Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015,
2016, 2017, 2018, 2019, 2020 Ole Tange, http://ole.tange.dk and Free

20
configure vendored
View file

@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.69 for parallel 20200722.
# Generated by GNU Autoconf 2.69 for parallel 20200822.
#
# Report bugs to <bug-parallel@gnu.org>.
#
@ -579,8 +579,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='parallel'
PACKAGE_TARNAME='parallel'
PACKAGE_VERSION='20200722'
PACKAGE_STRING='parallel 20200722'
PACKAGE_VERSION='20200822'
PACKAGE_STRING='parallel 20200822'
PACKAGE_BUGREPORT='bug-parallel@gnu.org'
PACKAGE_URL=''
@ -1214,7 +1214,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
\`configure' configures parallel 20200722 to adapt to many kinds of systems.
\`configure' configures parallel 20200822 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@ -1281,7 +1281,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
short | recursive ) echo "Configuration of parallel 20200722:";;
short | recursive ) echo "Configuration of parallel 20200822:";;
esac
cat <<\_ACEOF
@ -1357,7 +1357,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
parallel configure 20200722
parallel configure 20200822
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@ -1374,7 +1374,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
It was created by parallel $as_me 20200722, which was
It was created by parallel $as_me 20200822, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@ -2237,7 +2237,7 @@ fi
# Define the identity of the package.
PACKAGE='parallel'
VERSION='20200722'
VERSION='20200822'
cat >>confdefs.h <<_ACEOF
@ -2880,7 +2880,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
This file was extended by parallel $as_me 20200722, which was
This file was extended by parallel $as_me 20200822, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@ -2942,7 +2942,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
parallel config.status 20200722
parallel config.status 20200822
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"

View file

@ -1,4 +1,4 @@
AC_INIT([parallel], [20200722], [bug-parallel@gnu.org])
AC_INIT([parallel], [20200822], [bug-parallel@gnu.org])
AM_INIT_AUTOMAKE([-Wall -Werror foreign])
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_FILES([

View file

@ -189,7 +189,7 @@ from:tange@gnu.org
to:parallel@gnu.org, bug-parallel@gnu.org
stable-bcc: Jesse Alama <jessealama@fastmail.fm>
Subject: GNU Parallel 20200822 ('Beirut/Juan Carlos') released <<[stable]>>
Subject: GNU Parallel 20200822 ('Beirut') released <<[stable]>>
GNU Parallel 20200822 ('') <<[stable]>> has been released. It is available for download at: http://ftpmirror.gnu.org/parallel/
@ -207,22 +207,6 @@ New in this release:
News about GNU Parallel:
* Tips for Running Jobs on your VM https://support.ehelp.edu.au/support/solutions/articles/6000089713-tips-for-running-jobs-on-your-vm#parallel
* Introduction to GNU Parallel: Parallelizing Massive Individual Tasks https://www.youtube.com/watch?v=QSFLTEyCKvo
* Slides for same http://www.hpc.lsu.edu/training/weekly-materials/2020-Spring/GNUParallel_Spring_2020.pdf
* Linux-Fu: Parallel Universe https://hackaday.com/2020/06/29/linux-fu-parallel-universe/
* Resumable batch jobs with gnu parallel https://igor.io/parallel/
* Introducing Parallel into Shell https://www.petelawson.com/post/parallel-in-shell/
* AV1 encoding parallelization with GNU Parallel https://www.reddit.com/r/AV1/comments/fjvqp9/av1_encoding_parallelization_with_gnu_parallel/
* Beschleunigte Befehlsbearbeitung mit GNU Parallel https://www.linux-community.de/ausgaben/linuxuser/2013/06/beschleunigte-befehlsbearbeitung-mit-gnu-parallel/
Get the book: GNU Parallel 2018 http://www.lulu.com/shop/ole-tange/gnu-parallel-2018/paperback/product-23558902.html

View file

@ -1,7 +1,7 @@
<directory name="parallel" rev="289" vrev="2" srcmd5="f2fd10de667323622518e3653fe1a05b">
<entry name="PKGBUILD" md5="e6ac64e8d3065f4be850b3568268b42b" size="936" mtime="1595494017" />
<entry name="parallel-20200722.tar.bz2" md5="09c6b0ad719f1beae5622d2e56a1f831" size="2102288" mtime="1595494018" />
<entry name="parallel.spec" md5="e2eb4d93448e26b8ebefb7973d998d14" size="4876" mtime="1595451728" />
<entry name="parallel_20200722.dsc" md5="85208bd8f159a9e475dc21a3adaa082c" size="556" mtime="1595451729" />
<entry name="parallel_20200722.tar.gz" md5="2a965430557424f6778592bbd1660fd5" size="2294662" mtime="1595451729" />
<directory name="parallel" rev="290" vrev="1" srcmd5="a85169cae00a0e4ea737a0dcc7610790">
<entry name="PKGBUILD" md5="3568bb74a45413f6c3280ab141f01c2b" size="936" mtime="1598138648" />
<entry name="parallel-20200822.tar.bz2" md5="e3ce6ff94d5ba94218f3ab58dd81c0b6" size="2102282" mtime="1598138648" />
<entry name="parallel.spec" md5="77efee1567858f2f53f6d4c7b243e2f0" size="4876" mtime="1598138649" />
<entry name="parallel_20200822.dsc" md5="a81b6e0c9bb5bc165f2da177f401804f" size="556" mtime="1598138649" />
<entry name="parallel_20200822.tar.gz" md5="a2de27efd1fa57afecd4aeb4a3959661" size="2295089" mtime="1598138649" />
</directory>

View file

@ -1,7 +1,7 @@
Summary: Shell tool for executing jobs in parallel
Name: parallel
Version: 20200722
Version: 20200822
Release: 1.3
License: GPL-3.0-or-later
Group: Productivity/File utilities

View file

@ -23,7 +23,7 @@
use strict;
use Getopt::Long;
$Global::progname="niceload";
$Global::version = 20200723;
$Global::version = 20200822;
Getopt::Long::Configure("bundling","require_order");
get_options_from_array(\@ARGV) || die_usage();
if($opt::version) {

View file

@ -2160,7 +2160,7 @@ sub check_invalid_option_combinations() {
sub init_globals() {
# Defaults:
$Global::version = 20200820;
$Global::version = 20200822;
$Global::progname = 'parallel';
$::name = "GNU Parallel";
$Global::infinity = 2**31;
@ -4919,8 +4919,8 @@ sub usage() {
"If you use programs that use GNU Parallel to process data for an article in a",
"scientific publication, please cite:",
"",
" Tange, O. (2020, June 22). GNU Parallel 20200622 ('Floyd').",
" Zenodo. https://doi.org/10.5281/zenodo.3903853",
" Tange, O. (2020, August 22). GNU Parallel 20200822 ('Beirut').",
" Zenodo. https://doi.org/10.5281/zenodo.3996295",
"",
# Before changing this line, please read
# https://www.gnu.org/software/parallel/parallel_design.html#Citation-notice
@ -4950,8 +4950,8 @@ sub citation_notice() {
"If you use programs that use GNU Parallel to process data for an article in a",
"scientific publication, please cite:",
"",
" Tange, O. (2020, June 22). GNU Parallel 20200622 ('Floyd').",
" Zenodo. https://doi.org/10.5281/zenodo.3903853",
" Tange, O. (2020, August 22). GNU Parallel 20200822 ('Beirut').",
" Zenodo. https://doi.org/10.5281/zenodo.3996295",
"",
# Before changing this line, please read
# https://www.gnu.org/software/parallel/parallel_design.html#Citation-notice and
@ -5064,20 +5064,20 @@ sub citation() {
"If you use programs that use GNU Parallel to process data for an article in a",
"scientific publication, please cite:",
"",
"\@software{tange_2020_3903853,",
"\@software{tange_2020_3996295,",
" author = {Tange, Ole},",
" title = {GNU Parallel 20200622 ('Floyd')},",
" month = Jun,",
" title = {GNU Parallel 20200822 ('Beirut')},",
" month = Aug,",
" year = 2020,",
" note = {{GNU Parallel is a general parallelizer to run",
" multiple serial command line programs in parallel",
" without changing them.}},",
" publisher = {Zenodo},",
" doi = {10.5281/zenodo.3903853},",
" url = {https://doi.org/10.5281/zenodo.3903853}",
" doi = {10.5281/zenodo.3996295},",
" url = {https://doi.org/10.5281/zenodo.3996295}",
"}",
"",
"(Feel free to use \\nocite{tange_2020_3903853})",
"(Feel free to use \\nocite{tange_2020_3996295})",
"",
# Before changing this line, please read
# https://www.gnu.org/software/parallel/parallel_design.html#Citation-notice and
@ -10503,7 +10503,6 @@ sub slot($) {
my $max_len = $Global::minimal_command_line_length
|| Limits::Command::max_length();
if($^O eq "darwin") {
# env $((260932 - $single - $envc - $envl * 4 + 1064 ))
# Darwin's limit is affected by:
# * number of environment names (variables+functions)
# * size of environment
@ -10518,9 +10517,10 @@ sub slot($) {
my $envc = (keys %ENV);
my $envn = length join"",(keys %ENV);
my $envv = length join"",(values %ENV);
$darwin_max_len = 3+($max_len - $envn - $envv) / 5 - $envc*2;
$darwin_max_len = 3+($max_len - $envn - $envv)/5 - $envc*2;
::debug("init",
"length: $darwin_max_len 3+($max_len - $envn - $envv) / 5 - $envc*2");
"length: $darwin_max_len ".
"3+($max_len - $envn - $envv)/5 - $envc*2");
}
$max_len = $darwin_max_len;
}

View file

@ -2349,7 +2349,7 @@ when called with B<--shebang>).
Use B<--sqlmaster> instead.
=item B<--sqlmaster> I<DBURL> (beta testing)
=item B<--sqlmaster> I<DBURL>
Submit jobs via SQL server. I<DBURL> must point to a table, which will
contain the same information as B<--joblog>, the values from the input
@ -2391,12 +2391,12 @@ It can also be an alias from ~/.sql/aliases:
:myalias mysql:///mydb/paralleljobs
=item B<--sqlandworker> I<DBURL> (beta testing)
=item B<--sqlandworker> I<DBURL>
Shorthand for: B<--sqlmaster> I<DBURL> B<--sqlworker> I<DBURL>.
=item B<--sqlworker> I<DBURL> (beta testing)
=item B<--sqlworker> I<DBURL>
Execute jobs via SQL server. Read the input sources variables from the
table pointed to by I<DBURL>. The I<command> on the command line

View file

@ -574,7 +574,7 @@ $Global::Initfile && unlink $Global::Initfile;
exit ($err);
sub parse_options {
$Global::version = 20200723;
$Global::version = 20200822;
$Global::progname = 'sql';
# This must be done first as this may exec myself

View file

@ -4,6 +4,22 @@
# Each should be taking 3-10s and be possible to run in parallel
# I.e.: No race conditions, no logins
par_eta() {
echo '### Test of --eta'
seq 1 10 | stdout parallel --eta "sleep 1; echo {}" | wc -l
echo '### Test of --eta with no jobs'
stdout parallel --eta "sleep 1; echo {}" < /dev/null
}
par_progress() {
echo '### Test of --progress'
seq 1 10 | stdout parallel --progress "sleep 1; echo {}" | wc -l
echo '### Test of --progress with no jobs'
stdout parallel --progress "sleep 1; echo {}" < /dev/null
}
par_tee_with_premature_close() {
echo '--tee --pipe should send all data to all commands'
echo 'even if a command closes stdin before reading everything'

View file

@ -141,6 +141,12 @@ par_sshlogin_replacement() {
parallel -S '5//usr/bin/ssh '$SSHLOGIN1 --plus echo {sshlogin} {} {host} ::: and
}
par_timeout_onall() {
echo '### --timeout --onall on remote machines: 2*slept 1, 2 jobs failed'
parallel -j0 --timeout 6 --onall -S localhost,$SSHLOGIN1 'sleep {}; echo slept {}' ::: 1 8 9
echo jobs failed: $?
}
export -f $(compgen -A function | grep par_)
#compgen -A function | grep par_ | sort | parallel --delay $D -j$P --tag -k '{} 2>&1'
compgen -A function | grep par_ | sort |

View file

@ -121,6 +121,12 @@ par_retries_4() {
retries 4 48 49
}
par_csh_environment_variables_set() {
echo '### Check $PARALLEL_PID $PARALLEL_SEQ are set in csh'
parallel -S csh@localhost 'echo $PARALLEL_PID $PARALLEL_SEQ {}| wc -w' ::: a
}
export -f $(compgen -A function | grep par_)
#compgen -A function | grep par_ | sort | parallel --delay $D -j$P --tag -k '{} 2>&1'
compgen -A function | grep par_ | LC_ALL=C sort |

View file

@ -44,17 +44,6 @@ echo '### test --workdir . in $HOME'
echo '### TODO: test --filter-hosts proxied through the one host'
echo '### bug #43358: shellshock breaks exporting functions using --env'
echo shellshock-hardened to shellshock-hardened;
funky() { echo Function $1; };
export -f funky;
parallel --env funky -S parallel@localhost funky ::: shellshock-hardened
echo '2bug #43358: shellshock breaks exporting functions using --env'
echo shellshock-hardened to non-shellshock-hardened;
funky() { echo Function $1; };
export -f funky;
parallel --env funky -S centos3.tange.dk funky ::: non-shellshock-hardened
EOF
rm /tmp/myssh1 /tmp/myssh2 /tmp/myssh1-run /tmp/myssh2-run

View file

@ -1,26 +1,37 @@
#!/bin/bash
echo "### These tests requires VirtualBox running with the following images"
echo `whoami`"@redhat9"
echo `whoami`"@centos3"
echo `whoami`"@centos5"
echo `whoami`"@freebsd7"
par_warning_on_centos3() {
echo "### bug #37589: Red Hat 9 (Shrike) perl v5.8.0 built for i386-linux-thread-multi error"
testone() {
sshlogin="$1"
program="$2"
basename="$3"
scp "$program" "$sshlogin":/tmp/"$basename"
stdout ssh "$sshlogin" perl /tmp/"$basename" echo \
::: Old_must_fail_New_must_be_OK
}
export -f testone
parallel --tag -k testone {1} {2} {2/} \
::: vagrant@centos3 vagrant@rhel8 \
::: /usr/local/bin/parallel-20120822 `which parallel`
}
VBoxManage startvm CentOS3-root:centos3 >/dev/null 2>&1
VBoxManage startvm CentOS5-root:centos5 >/dev/null 2>&1
VBoxManage startvm RedHat9-root:redhat9 >/dev/null 2>&1
VBoxManage startvm FreeBSD71 >/dev/null 2>&1
ping -c 1 centos3.tange.dk >/dev/null 2>&1
ping -c 1 centos5.tange.dk >/dev/null 2>&1
ping -c 1 redhat9.tange.dk >/dev/null 2>&1
ping -c 1 freebsd7.tange.dk >/dev/null 2>&1
par_shellshock() {
# Bash on centos3 is non-shellshock-hardened
echo '### bug #43358: shellshock breaks exporting functions using --env'
echo shellshock-hardened to shellshock-hardened
funky() { echo Function $1; }
export -f funky
parallel --env funky -S parallel@localhost funky ::: shellshock-hardened
echo "### bug #37589: Red Hat 9 (Shrike) perl v5.8.0 built for i386-linux-thread-multi error"
rm -rf /tmp/parallel
cp `which parallel` /tmp/parallel
stdout parallel -kj10 --argsep == --basefile /tmp/parallel --tag --nonall -S redhat9.tange.dk,centos3.tange.dk,centos5.tange.dk,freebsd7.tange.dk /tmp/parallel --no-notice echo ::: OK_if_no_perl_warnings | sort
echo '2bug #43358: shellshock breaks exporting functions using --env'
echo shellshock-hardened to non-shellshock-hardened
funky() { echo Function $1; }
export -f funky
parallel --env funky -S centos3 funky ::: non-shellshock-hardened
}
#VBoxManage controlvm CentOS3-root:centos3 savestate
VBoxManage controlvm CentOS5-root:centos5 savestate
#VBoxManage controlvm RedHat9-root:redhat9 savestate
VBoxManage controlvm FreeBSD71 savestate
export -f $(compgen -A function | grep par_)
compgen -A function | grep par_ | LC_ALL=C sort |
parallel --timeout 1000% -j6 --tag -k --joblog /tmp/jl-`basename $0` '{} 2>&1' |
perl -pe 's:/usr/bin:/bin:g;'

View file

@ -8,18 +8,4 @@ SSHLOGIN1=$SSHUSER1@$SERVER1
SSHLOGIN2=$SSHUSER2@$SERVER2
cat <<'EOF' | sed -e s/\$SERVER1/$SERVER1/\;s/\$SERVER2/$SERVER2/ | parallel -vj10 -k --joblog /tmp/jl-`basename $0` -L1 -r
echo '### Test of --eta'
seq 1 10 | stdout parallel --eta "sleep 1; echo {}" | wc -l
echo '### Test of --eta with no jobs'
stdout parallel --eta "sleep 1; echo {}" < /dev/null
echo '### Test of --progress'
seq 1 10 | stdout parallel --progress "sleep 1; echo {}" | wc -l
echo '### Test of --progress with no jobs'
stdout parallel --progress "sleep 1; echo {}" < /dev/null
echo '### --timeout --onall on remote machines: 2*slept 1, 2 jobs failed'
parallel -j0 --timeout 6 --onall -S localhost,$SSHLOGIN1 'sleep {}; echo slept {}' ::: 1 8 9 ; echo jobs failed: $?
EOF

View file

@ -33,6 +33,7 @@ export -f destroy_one
server_list() {
grep -v '#' <<SSHOK
#generic/arch.98
tange/centos3.3
hfm4/centos4.4
hfm4/centos5.5
#generic/centos6.6

View file

@ -488,10 +488,10 @@ par_long_line_remote ### Deal with long command lines on remote servers
par_long_line_remote 2 6 30006
par_long_line_remote 3 50 250050
par_maxlinelen_X_I ### Test max line length -X -I
par_maxlinelen_X_I 201ecb8ca789cecf39ee914a6d75611b -
par_maxlinelen_X_I 88ab30e1d8b7459fddf88986ff282950 -
par_maxlinelen_X_I Chars per line (817788/7): 116826
par_maxlinelen_m_I ### Test max line length -m -I
par_maxlinelen_m_I c78bd0799bc23d8946732f8b3ae3c94e -
par_maxlinelen_m_I 51736abdee4738369ce04b354d40c887 -
par_maxlinelen_m_I Chars per line (697800/6): 116300
par_nice Check that --nice works
par_nice load_10

View file

@ -92,6 +92,13 @@ par_do_not_export_PARALLEL_ENV Should give 60k and not overflow
par_do_not_export_PARALLEL_ENV 1 1 60001
par_dryrun_timeout_ungroup bug #51039: --dry-run --timeout 1.4m -u breaks
par_dryrun_timeout_ungroup 1000 2000 8893
par_eta ### Test of --eta
par_eta 16
par_eta ### Test of --eta with no jobs
par_eta
par_eta Computers / CPU cores / Max jobs to run
par_eta 1:local / 8 / 1
par_eta par_eta ETA: 0s Left: 0 AVG: 0.00s 0
par_exitval_signal ### Test --joblog with exitval and Test --joblog with signal -- timing dependent
par_exitval_signal exitval=128+6 OK
par_exitval_signal signal OK
@ -226,6 +233,13 @@ par_pipepart_block 17-20
par_pipepart_block 18-20
par_pipepart_block 19-20
par_pipepart_block 20-20
par_progress ### Test of --progress
par_progress 16
par_progress ### Test of --progress with no jobs
par_progress
par_progress Computers / CPU cores / Max jobs to run
par_progress 1:local / 8 / 1
par_progress par_progress 0
par_resume_k ### --resume -k
par_resume_k job0id
par_resume_k job1id

View file

@ -1,8 +1,9 @@
make[1]: Entering directory '~/privat/parallel/testsuite'
# || true - because this should not fail if the VM is not running
VBoxManage controlvm CentOS3-root:centos3 savestate || true
VBoxManage controlvm RedHat9-root:redhat9 savestate || true
VBoxManage controlvm OracleXE savestate || true
parallel 'cd vagrant/generic/{} && vagrant suspend' ::: centos8 freebsd11 freebsd12 rhel8
==> default: Saving VM state and suspending execution...
==> default: Saving VM state and suspending execution...
==> default: Saving VM state and suspending execution...
==> default: Saving VM state and suspending execution...
make[1]: Leaving directory '~/privat/parallel/testsuite'
par_2gb_record_reading ### Trouble reading a record > 2 GB for certain versions of Perl (substr($a,0,2G+1)="fails")
par_2gb_record_reading ### perl -e $buf=("x"x(2**31))."x"; substr($buf,0,2**31+1)=""; print length $buf
@ -35,13 +36,49 @@ par_2gb_records_N parallel: Warning: A record was longer than 1690000003. Increa
par_2gb_records_N 8000000008
par_2gb_records_N 1000000000
make[1]: Entering directory '~/privat/parallel/testsuite'
# Make sure we can reach the virtual machines
#sudo ifconfig wlp13s0:0 192.168.1.72 || sudo ifconfig wlan0:0 192.168.1.72
sudo ifconfig enp14s0:0 192.168.1.72 || sudo ifconfig eth0:0 192.168.1.72
# If they are already running: Don't fail
VBoxManage startvm CentOS3-root:centos3\ Clone2 || VBoxManage controlvm CentOS3-root:centos3\ Clone2 resume || true
VBoxManage startvm RedHat9-root:redhat9 || VBoxManage controlvm RedHat9-root:redhat9 resume || true
Waiting for VM "RedHat9-root:redhat9" to power on...
VM "RedHat9-root:redhat9" has been successfully started.
parallel 'ping {} | read' ::: redhat9.tange.dk centos3.tange.dk
parallel 'cd vagrant/generic/{} && vagrant up' ::: centos8 freebsd11 freebsd12 rhel8
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Checking if box 'generic/rhel8' version '3.0.12' is up to date...
==> default: Resuming suspended VM...
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
default: SSH address: 127.0.0.1:2203
default: SSH username: vagrant
default: SSH auth method: private key
==> default: Machine booted and ready!
==> default: Machine already provisioned. Run `vagrant provision` or use the `--provision`
==> default: flag to force provisioning. Provisioners marked to run always will still run.
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Checking if box 'generic/freebsd12' version '3.0.12' is up to date...
==> default: Resuming suspended VM...
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
default: SSH address: 127.0.0.1:2205
default: SSH username: vagrant
default: SSH auth method: private key
==> default: Machine booted and ready!
==> default: Machine already provisioned. Run `vagrant provision` or use the `--provision`
==> default: flag to force provisioning. Provisioners marked to run always will still run.
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Checking if box 'generic/centos8' version '3.0.12' is up to date...
==> default: Resuming suspended VM...
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
default: SSH address: 127.0.0.1:2204
default: SSH username: vagrant
default: SSH auth method: private key
==> default: Machine booted and ready!
==> default: Machine already provisioned. Run `vagrant provision` or use the `--provision`
==> default: flag to force provisioning. Provisioners marked to run always will still run.
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Checking if box 'generic/freebsd11' version '3.0.12' is up to date...
==> default: Resuming suspended VM...
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
default: SSH address: 127.0.0.1:2206
default: SSH username: vagrant
default: SSH auth method: private key
==> default: Machine booted and ready!
==> default: Machine already provisioned. Run `vagrant provision` or use the `--provision`
==> default: flag to force provisioning. Provisioners marked to run always will still run.
make[1]: Leaving directory '~/privat/parallel/testsuite'

View file

@ -88,6 +88,18 @@ par_test_pipe_onall parallel@lo 3
par_test_pipe_onall parallel@lo 1
par_test_pipe_onall parallel@lo 2
par_test_pipe_onall parallel@lo 3
par_timeout_onall ### --timeout --onall on remote machines: 2*slept 1, 2 jobs failed
par_timeout_onall slept 1
par_timeout_onall parallel: Warning: This job was killed because it timed out:
par_timeout_onall parallel: Warning: sleep 8; echo slept 8
par_timeout_onall parallel: Warning: This job was killed because it timed out:
par_timeout_onall parallel: Warning: sleep 9; echo slept 9
par_timeout_onall slept 1
par_timeout_onall parallel: Warning: This job was killed because it timed out:
par_timeout_onall parallel: Warning: sleep 8; echo slept 8
par_timeout_onall parallel: Warning: This job was killed because it timed out:
par_timeout_onall parallel: Warning: sleep 9; echo slept 9
par_timeout_onall jobs failed: 2
par_wd_braces ### Test --wd {}
par_wd_braces wd1
par_wd_braces wd2

View file

@ -2,6 +2,8 @@ par_bar_m ### test --bar -m
par_bar_m 0
par_bar_m 50
par_bar_m 100
par_csh_environment_variables_set ### Check $PARALLEL_PID $PARALLEL_SEQ are set in csh
par_csh_environment_variables_set 3
par_keep_order ### Test --keep-order
par_keep_order job0
par_keep_order job1
@ -32,3 +34,5 @@ par_retries_2 ### Test of --retries - it should run 25 jobs in total
par_retries_2 OK
par_retries_4 ### Test of --retries - it should run 49 jobs in total
par_retries_4 OK
par_transfer_special_char_names ### Test --return of weirdly named file
par_transfer_special_char_names aa<${#}" b

View file

@ -304,6 +304,8 @@ parallel: Warning: Only enough file handles to run 2 jobs in parallel.
parallel: Warning: Running 'parallel -j0 -N 2 --pipe parallel -j0' or
parallel: Warning: raising 'ulimit -n' or 'nofile' in /etc/security/limits.conf
parallel: Warning: or /proc/sys/fs/file-max may help.
parallel: Warning: No more file handles.
parallel: Warning: Raising ulimit -n or /etc/security/limits.conf may help.
echo 'bug #34241: --pipe should not spawn unneeded processes - part 2'
bug #34241: --pipe should not spawn unneeded processes - part 2
seq 500 | parallel --tmpdir . -j10 --pipe --block 1k --files wc >/dev/null; ls *.par | wc -l; rm *.par; seq 500 | parallel --tmpdir . -j10 --pipe --block 1k --files --dry-run wc >/dev/null; echo No .par should exist; stdout ls *.par

View file

@ -1,16 +1,16 @@
echo '### Test of xargs -m command lines > 130k'; seq 1 60000 | parallel -m -j1 echo a{}b{}c | tee >(wc >/tmp/awc$$) >(sort | md5sum) >/tmp/a$$; wait; CHAR=$(cat /tmp/a$$ | wc -c); LINES=$(cat /tmp/a$$ | wc -l); echo "Chars per line:" $(echo "$CHAR/$LINES" | bc); cat /tmp/awc$$; rm /tmp/a$$ /tmp/awc$$
### Test of xargs -m command lines > 130k
c78bd0799bc23d8946732f8b3ae3c94e -
51736abdee4738369ce04b354d40c887 -
Chars per line: 116300
6 119994 697800
echo '### Test of xargs -X command lines > 130k'; seq 1 60000 | parallel -X -j1 echo a{}b{}c | tee >(wc >/tmp/bwc$$) >(sort | (sleep 1; md5sum)) >/tmp/b$$; wait; CHAR=$(cat /tmp/b$$ | wc -c); LINES=$(cat /tmp/b$$ | wc -l); echo "Chars per line:" $(echo "$CHAR/$LINES" | bc); cat /tmp/bwc$$; rm /tmp/b$$ /tmp/bwc$$
### Test of xargs -X command lines > 130k
201ecb8ca789cecf39ee914a6d75611b -
88ab30e1d8b7459fddf88986ff282950 -
Chars per line: 116826
7 60000 817788
echo '### Test of xargs -m command lines > 130k'; seq 1 60000 | parallel -k -j1 -m echo | md5sum
### Test of xargs -m command lines > 130k
590091fd85dcb98f91c5e89cdddf21ef -
e606ff4068f4b48582d3305d39f93caf -
echo '### This causes problems if we kill child processes'; # 2>/dev/null to avoid parallel: Warning: Starting 45 processes took > 2 sec.
### This causes problems if we kill child processes
seq 2 40 | parallel -j 0 seq 1 10 2>/dev/null | sort | md5sum

View file

@ -73,8 +73,8 @@ please cite as described in 'parallel --citation'.
echo '### bug #39787: --xargs broken'
### bug #39787: --xargs broken
nice perl -e 'for(1..30000){print "$_\n"}' | $NICEPAR --xargs -k echo | perl -ne 'print length $_,"\n"'
131052
37842
131058
37836
echo '### --delay should grow by 3 sec per arg'
### --delay should grow by 3 sec per arg
stdout /usr/bin/time -f %e parallel --delay 3 true ::: 1 2 | perl -ne '$_ >= 3 and $_ <= 8 and print "OK\n"'

View file

@ -1,120 +1,16 @@
par_big_func 1 2168 52032
par_big_func 1 2168 52032
par_big_func 1 2168 52032
par_big_func 1 2168 52032
par_big_func 1 2168 52032
par_big_func 1 2168 52032
par_big_func 1 2168 52032
par_big_func 1 2168 52032
par_big_func 1 2168 52032
par_big_func 1 2168 52032
par_big_func 1 156 3684
par_big_func_name 1 2168 52032
par_big_func_name 1 2168 52032
par_big_func_name 1 2168 52032
par_big_func_name 1 2168 52032
par_big_func_name 1 2168 52032
par_big_func_name 1 2168 52032
par_big_func_name 1 2168 52032
par_big_func_name 1 2168 52032
par_big_func_name 1 2168 52032
par_big_func_name 1 2168 52032
par_big_func_name 1 156 3684
par_big_var_func_name 1 2168 52032
par_big_var_func_name 1 2168 52032
par_big_var_func_name 1 2168 52032
par_big_var_func_name 1 2168 52032
par_big_var_func_name 1 2168 52032
par_big_var_func_name 1 2168 52032
par_big_var_func_name 1 2168 52032
par_big_var_func_name 1 2168 52032
par_big_var_func_name 1 2168 52032
par_big_var_func_name 1 2168 52032
par_big_var_func_name 1 156 3684
par_many_args 1 16156 32312
par_many_args 1 16156 32312
par_many_args 1 16156 32312
par_many_args 1 16156 32312
par_many_args 1 16156 32312
par_many_args 1 16156 32312
par_many_args 1 16156 32312
par_many_args 1 16156 32312
par_many_args 1 16156 32312
par_many_args 1 16156 32312
par_many_args 1 16156 32312
par_many_args 1 16156 32312
par_many_args 1 16156 32312
par_many_args 1 16156 32312
par_many_args 1 16156 32312
par_many_args 1 16156 32312
par_many_args 1 3504 7008
par_many_func 1 1260 30240
par_many_func 1 1260 30240
par_many_func 1 1260 30240
par_many_func 1 1260 30240
par_many_func 1 1260 30240
par_many_func 1 1260 30240
par_many_func 1 1260 30240
par_many_func 1 1260 30240
par_many_func 1 1260 30240
par_many_func 1 1260 30240
par_many_func 1 1260 30240
par_many_func 1 1260 30240
par_many_func 1 1260 30240
par_many_func 1 1260 30240
par_many_func 1 1260 30240
par_many_func 1 1260 30240
par_many_func 1 1260 30240
par_many_func 1 416 9924
par_many_var 1 1344 32256
par_many_var 1 1344 32256
par_many_var 1 1344 32256
par_many_var 1 1344 32256
par_many_var 1 1344 32256
par_many_var 1 1344 32256
par_many_var 1 1344 32256
par_many_var 1 1344 32256
par_many_var 1 1344 32256
par_many_var 1 1344 32256
par_many_var 1 1344 32256
par_many_var 1 1344 32256
par_many_var 1 1344 32256
par_many_var 1 1344 32256
par_many_var 1 1344 32256
par_many_var 1 1344 32256
par_many_var 1 332 7908
par_many_var_big_func 1 1304 31296
par_many_var_big_func 1 1304 31296
par_many_var_big_func 1 1304 31296
par_many_var_big_func 1 1304 31296
par_many_var_big_func 1 1304 31296
par_many_var_big_func 1 1304 31296
par_many_var_big_func 1 1304 31296
par_many_var_big_func 1 1304 31296
par_many_var_big_func 1 1304 31296
par_many_var_big_func 1 1304 31296
par_many_var_big_func 1 1304 31296
par_many_var_big_func 1 1304 31296
par_many_var_big_func 1 1304 31296
par_many_var_big_func 1 1304 31296
par_many_var_big_func 1 1304 31296
par_many_var_big_func 1 1304 31296
par_many_var_big_func 1 972 23268
par_many_var_func 1 1260 30240
par_many_var_func 1 1260 30240
par_many_var_func 1 1260 30240
par_many_var_func 1 1260 30240
par_many_var_func 1 1260 30240
par_many_var_func 1 1260 30240
par_many_var_func 1 1260 30240
par_many_var_func 1 1260 30240
par_many_var_func 1 1260 30240
par_many_var_func 1 1260 30240
par_many_var_func 1 1260 30240
par_many_var_func 1 1260 30240
par_many_var_func 1 1260 30240
par_many_var_func 1 1260 30240
par_many_var_func 1 1260 30240
par_many_var_func 1 1260 30240
par_many_var_func 1 1260 30240
par_many_var_func 1 416 9924
par_big_func 1 2124 50976
par_big_func 1 1212 29028
par_big_func_name 1 1324 31776
par_big_func_name 1 1176 28224
par_big_var_func_name 1 1324 31776
par_big_var_func_name 1 344 8228
par_many_args 1 16420 32840
par_many_args 1 3580 7160
par_many_func 1 1168 28032
par_many_func 1 500 11972
par_many_var 1 1368 32832
par_many_var 1 300 7172
par_many_var_big_func 1 1176 28224
par_many_var_big_func 1 492 11780
par_many_var_func 1 1768 42432
par_many_var_func 1 1568 37572

View file

@ -109,6 +109,9 @@ vagrant@parallel-server3
echo '### test --filter-hosts with server w/o ssh, non-existing server'
### test --filter-hosts with server w/o ssh, non-existing server
parallel -S 192.168.1.197,8.8.8.8,vagrant@parallel-server1,vagrant@parallel-server2,vagrant@parallel-server3 --filter-hosts --nonall -k --tag echo
vagrant@parallel-server1
vagrant@parallel-server2
vagrant@parallel-server3
echo '### bug #41964: --controlmaster not seems to reuse OpenSSH connections to the same host'
### bug #41964: --controlmaster not seems to reuse OpenSSH connections to the same host
(parallel -S vagrant@parallel-server1 true ::: {1..20}; echo No --controlmaster - finish last) & (parallel -M -S vagrant@parallel-server1 true ::: {1..20}; echo With --controlmaster - finish first) & wait
@ -124,13 +127,3 @@ echo '### test --workdir . in $HOME'
OK
echo '### TODO: test --filter-hosts proxied through the one host'
### TODO: test --filter-hosts proxied through the one host
echo '### bug #43358: shellshock breaks exporting functions using --env'
### bug #43358: shellshock breaks exporting functions using --env
echo shellshock-hardened to shellshock-hardened; funky() { echo Function $1; }; export -f funky; parallel --env funky -S parallel@localhost funky ::: shellshock-hardened
shellshock-hardened to shellshock-hardened
Function shellshock-hardened
echo '2bug #43358: shellshock breaks exporting functions using --env'
2bug #43358: shellshock breaks exporting functions using --env
echo shellshock-hardened to non-shellshock-hardened; funky() { echo Function $1; }; export -f funky; parallel --env funky -S centos3.tange.dk funky ::: non-shellshock-hardened
shellshock-hardened to non-shellshock-hardened
Function non-shellshock-hardened

View file

@ -1425,4 +1425,4 @@ C
echo A
echo B
echo C
8
7

View file

@ -1,10 +1,16 @@
### These tests requires VirtualBox running with the following images
tange@redhat9
tange@centos3
tange@centos5
tange@freebsd7
### bug #37589: Red Hat 9 (Shrike) perl v5.8.0 built for i386-linux-thread-multi error
centos3.tange.dk OK_if_no_perl_warnings
centos5.tange.dk OK_if_no_perl_warnings
freebsd7.tange.dk OK_if_no_perl_warnings
redhat9.tange.dk OK_if_no_perl_warnings
par_shellshock ### bug #43358: shellshock breaks exporting functions using --env
par_shellshock shellshock-hardened to shellshock-hardened
par_shellshock Function shellshock-hardened
par_shellshock 2bug #43358: shellshock breaks exporting functions using --env
par_shellshock shellshock-hardened to non-shellshock-hardened
par_shellshock parallel: Warning: Could not figure out number of cpus on centos3 (). Using 1.
par_shellshock Function non-shellshock-hardened
par_warning_on_centos3 ### bug #37589: Red Hat 9 (Shrike) perl v5.8.0 built for i386-linux-thread-multi error
par_warning_on_centos3 vagrant@centos3 /usr/local/bin/parallel-20120822 Bareword found where operator expected at /tmp/parallel-20120822 line 1249, near "$Global::original_stderr init_progress"
par_warning_on_centos3 vagrant@centos3 /usr/local/bin/parallel-20120822 (Missing operator before init_progress?)
par_warning_on_centos3 vagrant@centos3 /usr/local/bin/parallel-20120822 Bareword found where operator expected at /tmp/parallel-20120822 line 1294, near "$Global::original_stderr init_progress"
par_warning_on_centos3 vagrant@centos3 /usr/local/bin/parallel-20120822 (Missing operator before init_progress?)
par_warning_on_centos3 vagrant@centos3 /usr/local/bin/parallel-20120822 Old_must_fail_New_must_be_OK
par_warning_on_centos3 vagrant@centos3 /usr/local/bin/parallel Old_must_fail_New_must_be_OK
par_warning_on_centos3 vagrant@rhel8 /usr/local/bin/parallel-20120822 Old_must_fail_New_must_be_OK
par_warning_on_centos3 vagrant@rhel8 /usr/local/bin/parallel Old_must_fail_New_must_be_OK

View file

@ -1,28 +0,0 @@
echo '### Test of --eta'
### Test of --eta
seq 1 10 | stdout parallel --eta "sleep 1; echo {}" | wc -l
16
echo '### Test of --eta with no jobs'
### Test of --eta with no jobs
stdout parallel --eta "sleep 1; echo {}" < /dev/null
Computers / CPU cores / Max jobs to run
1:local / 8 / 1
ETA: 0s Left: 0 AVG: 0.00s 0
echo '### Test of --progress'
### Test of --progress
seq 1 10 | stdout parallel --progress "sleep 1; echo {}" | wc -l
16
echo '### Test of --progress with no jobs'
### Test of --progress with no jobs
stdout parallel --progress "sleep 1; echo {}" < /dev/null
Computers / CPU cores / Max jobs to run
1:local / 8 / 1
0
echo '### --timeout --onall on remote machines: 2*slept 1, 2 jobs failed'
### --timeout --onall on remote machines: 2*slept 1, 2 jobs failed
parallel -j0 --timeout 6 --onall -S localhost,$SSHLOGIN1 'sleep {}; echo slept {}' ::: 1 8 9 ; echo jobs failed: $?
slept 1
slept 1
jobs failed: 2

View file

@ -1,13 +0,0 @@
echo '### Test --return of weirdly named file'
### Test --return of weirdly named file
stdout parallel --return {} -vv -S parallel\@parallel-server1 echo '>'{} ::: 'aa<${#}" b' | perl -pe 's/\S*parallel-server\S*/one-server/;s:[a-z+=/\\0-9]{500,}:base64:i;'; rm 'aa<${#}" b'
ssh -l parallel one-server -- exec 'perl -e '"'"'$ENV{"PARALLEL_PID"}="XXXXX";$ENV{"PARALLEL_SEQ"}="1";$ENV{"PARALLEL_SSHLOGIN"}="parallel\@parallel-server1";$ENV{"PARALLEL_SSHHOST"}="parallel-server1";$ENV{"PARALLEL_JOBSLOT"}="1";$bashfunc = "";@ARGV="echo >'"'"'"'"'"'"'"'"'aa<\${#}\" b'"'"'"'"'"'"'"'"'";$shell="$ENV{SHELL}";$tmpdir="/tmp/test61-tmpdir";$nice=0;do{$ENV{PARALLEL_TMP}=$tmpdir."/par".join"",map{(0..9,"a".."z","A".."Z")[rand(62)]}(1..5);}while(-e$ENV{PARALLEL_TMP});$SIG{CHLD}=sub{$done=1;};$pid=fork;unless($pid){eval{setpgrp};eval{setpriority(0,0,$nice)};exec$shell,"-c",($bashfunc."@ARGV");die"exec:$!\n";}do{$s=$s<1?0.001+$s*1.03:$s;select(undef,undef,undef,$s);}until($done||getppid==1);kill(SIGHUP,-${pid})unless$done;wait;exit($?&127?128+($?&127):1+$?>>8)'"'";_EXIT_status=$?; mkdir -p ./. && rsync --protocol 30 --rsync-path='cd ././.; rsync' -rlDzR -e'ssh -l parallel' parallel-server1:"'"'./aa<${#}" b'"'" ./.;exit $_EXIT_status;
echo '### Test if remote login shell is csh'
### Test if remote login shell is csh
stdout parallel -k -vv -S csh@localhost 'echo $PARALLEL_PID $PARALLEL_SEQ {}| wc -w' ::: a b c | perl -pe 's/\S*parallel-server\S*/one-server/;s:[a-z+=/\\0-9]{500,}:base64:i;'
ssh -l csh localhost -- exec 'perl -e '"'"'$ENV{"PARALLEL_PID"}="XXXXX";$ENV{"PARALLEL_SEQ"}="1";$ENV{"PARALLEL_SSHLOGIN"}="csh\@localhost";$ENV{"PARALLEL_SSHHOST"}="localhost";$ENV{"PARALLEL_JOBSLOT"}="1";$bashfunc = "";@ARGV="echo \$PARALLEL_PID \$PARALLEL_SEQ a| wc -w";$shell="$ENV{SHELL}";$tmpdir="/tmp/test61-tmpdir";$nice=0;do{$ENV{PARALLEL_TMP}=$tmpdir."/par".join"",map{(0..9,"a".."z","A".."Z")[rand(62)]}(1..5);}while(-e$ENV{PARALLEL_TMP});$SIG{CHLD}=sub{$done=1;};$pid=fork;unless($pid){eval{setpgrp};eval{setpriority(0,0,$nice)};exec$shell,"-c",($bashfunc."@ARGV");die"exec:$!\n";}do{$s=$s<1?0.001+$s*1.03:$s;select(undef,undef,undef,$s);}until($done||getppid==1);kill(SIGHUP,-${pid})unless$done;wait;exit($?&127?128+($?&127):1+$?>>8)'"'";
3
ssh -l csh localhost -- exec 'perl -e '"'"'$ENV{"PARALLEL_PID"}="XXXXX";$ENV{"PARALLEL_SEQ"}="2";$ENV{"PARALLEL_SSHLOGIN"}="csh\@localhost";$ENV{"PARALLEL_SSHHOST"}="localhost";$ENV{"PARALLEL_JOBSLOT"}="2";$bashfunc = "";@ARGV="echo \$PARALLEL_PID \$PARALLEL_SEQ b| wc -w";$shell="$ENV{SHELL}";$tmpdir="/tmp/test61-tmpdir";$nice=0;do{$ENV{PARALLEL_TMP}=$tmpdir."/par".join"",map{(0..9,"a".."z","A".."Z")[rand(62)]}(1..5);}while(-e$ENV{PARALLEL_TMP});$SIG{CHLD}=sub{$done=1;};$pid=fork;unless($pid){eval{setpgrp};eval{setpriority(0,0,$nice)};exec$shell,"-c",($bashfunc."@ARGV");die"exec:$!\n";}do{$s=$s<1?0.001+$s*1.03:$s;select(undef,undef,undef,$s);}until($done||getppid==1);kill(SIGHUP,-${pid})unless$done;wait;exit($?&127?128+($?&127):1+$?>>8)'"'";
3
ssh -l csh localhost -- exec 'perl -e '"'"'$ENV{"PARALLEL_PID"}="XXXXX";$ENV{"PARALLEL_SEQ"}="3";$ENV{"PARALLEL_SSHLOGIN"}="csh\@localhost";$ENV{"PARALLEL_SSHHOST"}="localhost";$ENV{"PARALLEL_JOBSLOT"}="3";$bashfunc = "";@ARGV="echo \$PARALLEL_PID \$PARALLEL_SEQ c| wc -w";$shell="$ENV{SHELL}";$tmpdir="/tmp/test61-tmpdir";$nice=0;do{$ENV{PARALLEL_TMP}=$tmpdir."/par".join"",map{(0..9,"a".."z","A".."Z")[rand(62)]}(1..5);}while(-e$ENV{PARALLEL_TMP});$SIG{CHLD}=sub{$done=1;};$pid=fork;unless($pid){eval{setpgrp};eval{setpriority(0,0,$nice)};exec$shell,"-c",($bashfunc."@ARGV");die"exec:$!\n";}do{$s=$s<1?0.001+$s*1.03:$s;select(undef,undef,undef,$s);}until($done||getppid==1);kill(SIGHUP,-${pid})unless$done;wait;exit($?&127?128+($?&127):1+$?>>8)'"'";
3