mirror of
https://git.savannah.gnu.org/git/parallel.git
synced 2024-11-22 14:07:55 +00:00
Fixed bug #46214: Using --pipepart doesn't spawn multiple jobs in version 20150922.
This commit is contained in:
parent
6ad2e2bac3
commit
210ca9614c
|
@ -212,7 +212,7 @@ cc:Tim Cuthbertson <tim3d.junk@gmail.com>,
|
||||||
Ryoichiro Suzuki <ryoichiro.suzuki@gmail.com>,
|
Ryoichiro Suzuki <ryoichiro.suzuki@gmail.com>,
|
||||||
Jesse Alama <jesse.alama@gmail.com>
|
Jesse Alama <jesse.alama@gmail.com>
|
||||||
|
|
||||||
Subject: GNU Parallel 20151022 ('Liquid Water') released <<[stable]>>
|
Subject: GNU Parallel 20151022 ('Liquid Water / 9N314M') released <<[stable]>>
|
||||||
|
|
||||||
GNU Parallel 20151022 ('Liquid Water') <<[stable]>> has been released. It is available for download at: http://ftp.gnu.org/gnu/parallel/
|
GNU Parallel 20151022 ('Liquid Water') <<[stable]>> has been released. It is available for download at: http://ftp.gnu.org/gnu/parallel/
|
||||||
|
|
||||||
|
|
24
src/parallel
24
src/parallel
|
@ -109,20 +109,15 @@ if($opt::nonall or $opt::onall) {
|
||||||
$Global::JobQueue = JobQueue->new(
|
$Global::JobQueue = JobQueue->new(
|
||||||
\@command,\@input_source_fh,$Global::ContextReplace,$number_of_args,\@Global::ret_files);
|
\@command,\@input_source_fh,$Global::ContextReplace,$number_of_args,\@Global::ret_files);
|
||||||
|
|
||||||
if($opt::eta or $opt::bar or $opt::shuf or $Global::halt_pct) {
|
|
||||||
# Count the number of jobs or shuffle all jobs
|
|
||||||
# before starting any
|
|
||||||
$Global::JobQueue->total_jobs();
|
|
||||||
}
|
|
||||||
# Compute $Global::max_jobs_running
|
|
||||||
for my $sshlogin (values %Global::host) {
|
|
||||||
$sshlogin->max_jobs_running();
|
|
||||||
}
|
|
||||||
if($opt::pipepart) {
|
if($opt::pipepart) {
|
||||||
if($opt::roundrobin) {
|
if($opt::roundrobin) {
|
||||||
# Compute size of -a
|
# Compute size of -a
|
||||||
my $size = 0;
|
my $size = 0;
|
||||||
$size += -s $_ for @opt::a;
|
$size += -s $_ for @opt::a;
|
||||||
|
# Compute $Global::max_jobs_running
|
||||||
|
for my $sshlogin (values %Global::host) {
|
||||||
|
$sshlogin->max_jobs_running();
|
||||||
|
}
|
||||||
$Global::max_jobs_running or ::die_bug("Global::max_jobs_running not set");
|
$Global::max_jobs_running or ::die_bug("Global::max_jobs_running not set");
|
||||||
# Set --blocksize = size / no of proc
|
# Set --blocksize = size / no of proc
|
||||||
$opt::blocksize = 1 + $size / $Global::max_jobs_running;
|
$opt::blocksize = 1 + $size / $Global::max_jobs_running;
|
||||||
|
@ -133,6 +128,17 @@ if($opt::pipepart) {
|
||||||
map { $Global::JobQueue->{'commandlinequeue'}->get() } @Global::cat_partials
|
map { $Global::JobQueue->{'commandlinequeue'}->get() } @Global::cat_partials
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
if($opt::eta or $opt::bar or $opt::shuf or $Global::halt_pct) {
|
||||||
|
# Count the number of jobs or shuffle all jobs
|
||||||
|
# before starting any.
|
||||||
|
# Must be done after ungetting any --pipepart jobs.
|
||||||
|
$Global::JobQueue->total_jobs();
|
||||||
|
}
|
||||||
|
# Compute $Global::max_jobs_running
|
||||||
|
# Must be done after ungetting any --pipepart jobs.
|
||||||
|
for my $sshlogin (values %Global::host) {
|
||||||
|
$sshlogin->max_jobs_running();
|
||||||
|
}
|
||||||
|
|
||||||
init_run_jobs();
|
init_run_jobs();
|
||||||
my $sem;
|
my $sem;
|
||||||
|
|
|
@ -666,15 +666,8 @@ cannot be exported:
|
||||||
'my_importer; echo "{}" "${indexed[{}]}" "${assoc[${indexed[{}]}]}"' ::: "${!indexed[@]}"
|
'my_importer; echo "{}" "${indexed[{}]}" "${assoc[${indexed[{}]}]}"' ::: "${!indexed[@]}"
|
||||||
|
|
||||||
To copy the full environment (both exported and not exported variables
|
To copy the full environment (both exported and not exported variables
|
||||||
and functions) use this function (e.g. by putting it in .bashrc):
|
and functions) use env_parallel as described under the option I<command>.
|
||||||
|
|
||||||
env_parallel() {
|
|
||||||
export parallel_bash_environment="$(echo "shopt -s expand_aliases 2>/dev/null"; alias;typeset -p | grep -vFf <(readonly; echo GROUPS; echo FUNCNAME; echo DIRSTACK; echo _; echo PIPESTATUS; echo USERNAME) | grep -v BASH_;typeset -f)";
|
|
||||||
`which parallel` "$@";
|
|
||||||
unset parallel_bash_environment;
|
|
||||||
}
|
|
||||||
# call as:
|
|
||||||
env_parallel [normal parallel options]
|
|
||||||
|
|
||||||
See also: B<--record-env>.
|
See also: B<--record-env>.
|
||||||
|
|
||||||
|
|
|
@ -125,21 +125,28 @@ templates. Templates can be wrapped in other templates.
|
||||||
|
|
||||||
=item --shellquote
|
=item --shellquote
|
||||||
|
|
||||||
echo <<shell double quoted input>>
|
echo I<shell double quoted input>
|
||||||
|
|
||||||
=item --nice I<pri>
|
=item --nice I<pri>
|
||||||
|
|
||||||
\nice -n I<pri> $shell -c <<shell quoted input>>
|
\nice -n I<pri> I<shell> -c I<shell quoted input>
|
||||||
|
|
||||||
The \ is needed to avoid using the builtin nice command, which does not
|
The \ is needed to avoid using the builtin nice command, which does not
|
||||||
support -n in B<tcsh>. B<$shell -c> is needed to nice composed commands
|
support -n in B<tcsh>. B<I<shell> -c> is needed to nice composed commands
|
||||||
command.
|
command.
|
||||||
|
|
||||||
=item --cat
|
=item --cat
|
||||||
|
|
||||||
(cat > {}; <<input>> {}; perl -e '$bash=shift; $csh=shift; for(@ARGV)
|
cat > {}; I<input> {};
|
||||||
{unlink;rmdir;} if($bash=~s/h//) {exit$bash;} exit$csh;' "$?h"
|
perl -e '$bash = shift;
|
||||||
"$status" {});
|
$csh = shift;
|
||||||
|
for(@ARGV) {
|
||||||
|
unlink;rmdir;
|
||||||
|
}
|
||||||
|
if($bash =~ s/h//) {
|
||||||
|
exit $bash;
|
||||||
|
}
|
||||||
|
exit $csh;' "$?h" "$status" {};
|
||||||
|
|
||||||
{} is set to $PARALLEL_TMP which is a tmpfile. The Perl script saves
|
{} is set to $PARALLEL_TMP which is a tmpfile. The Perl script saves
|
||||||
the exit value, unlinks the tmpfile, and returns the exit value - no
|
the exit value, unlinks the tmpfile, and returns the exit value - no
|
||||||
|
@ -148,30 +155,35 @@ matter if the shell is B<bash> (using $?) or B<*csh> (using $status).
|
||||||
=item --fifo
|
=item --fifo
|
||||||
|
|
||||||
perl -e '($s,$c,$f) = @ARGV;
|
perl -e '($s,$c,$f) = @ARGV;
|
||||||
system "mkfifo", $f;
|
# mkfifo $PARALLEL_TMP
|
||||||
$pid = fork || exec $s, "-c", $c;
|
system "mkfifo", $f;
|
||||||
open($o,">",$f) || die $!;
|
# spawn $shell -c $command &
|
||||||
while(sysread(STDIN,$buf,32768)){
|
$pid = fork || exec $s, "-c", $c;
|
||||||
syswrite $o, $buf;
|
open($o,">",$f) || die $!;
|
||||||
}
|
# cat > $PARALLEL_TMP
|
||||||
close $o;
|
while(sysread(STDIN,$buf,131072)){
|
||||||
waitpid $pid,0;
|
syswrite $o, $buf;
|
||||||
unlink $f;
|
}
|
||||||
exit $?/256;' $shell <<input>> $PARALLEL_TMP
|
close $o;
|
||||||
|
# waitpid to get the exit code from $command
|
||||||
|
waitpid $pid,0;
|
||||||
|
# Cleanup
|
||||||
|
unlink $f;
|
||||||
|
exit $?/256;' I<shell> I<input> $PARALLEL_TMP
|
||||||
|
|
||||||
This is an elaborate way of: mkfifo {}; run <<input>> in the
|
This is an elaborate way of: mkfifo {}; run I<input> in the
|
||||||
background using $shell; copying STDIN to {}; waiting for background
|
background using I<shell>; copying STDIN to {}; waiting for background
|
||||||
to complete; remove {} and exit with the exit code from <<input>>.
|
to complete; remove {} and exit with the exit code from I<input>.
|
||||||
|
|
||||||
It is made this way to be compatible with B<*csh>.
|
It is made this way to be compatible with B<*csh>.
|
||||||
|
|
||||||
=item --sshlogin I<sln>
|
=item --sshlogin I<sln>
|
||||||
|
|
||||||
ssh I<sln> <<shell quoted input>>
|
ssh I<sln> I<shell quoted input>
|
||||||
|
|
||||||
=item --transfer
|
=item --transfer
|
||||||
|
|
||||||
( ssh I<sln> mkdir -p ./I<workdir>;rsync --protocol 30 -rlDzR -essh ./{} I<sln>:./I<workdir> ); <<input>>
|
( ssh I<sln> mkdir -p ./I<workdir>;rsync --protocol 30 -rlDzR -essh ./{} I<sln>:./I<workdir> ); I<input>
|
||||||
|
|
||||||
Read about B<--protocol 30> in the section B<Rsync protocol version>.
|
Read about B<--protocol 30> in the section B<Rsync protocol version>.
|
||||||
|
|
||||||
|
@ -181,7 +193,7 @@ Read about B<--protocol 30> in the section B<Rsync protocol version>.
|
||||||
|
|
||||||
=item --return I<file>
|
=item --return I<file>
|
||||||
|
|
||||||
<<input>>; _EXIT_status=$?; mkdir -p I<workdir>; rsync --protocol 30 --rsync-path=cd\ ./I<workdir>\;\ rsync -rlDzR -essh I<sln>:./I<file> ./I<workdir>; exit $_EXIT_status;
|
I<input>; _EXIT_status=$?; mkdir -p I<workdir>; rsync --protocol 30 --rsync-path=cd\ ./I<workdir>\;\ rsync -rlDzR -essh I<sln>:./I<file> ./I<workdir>; exit $_EXIT_status;
|
||||||
|
|
||||||
The B<--rsync-path=cd ...> is needed because old versions of B<rsync>
|
The B<--rsync-path=cd ...> is needed because old versions of B<rsync>
|
||||||
do not support B<--no-implied-dirs>.
|
do not support B<--no-implied-dirs>.
|
||||||
|
@ -192,7 +204,7 @@ wrapping 'sh -c' is enough?
|
||||||
|
|
||||||
=item --cleanup
|
=item --cleanup
|
||||||
|
|
||||||
<<input>> _EXIT_status=$?; <<return>>
|
I<input> _EXIT_status=$?; <<return>>
|
||||||
|
|
||||||
ssh I<sln> \(rm\ -f\ ./I<workdir>/{}\;\ rmdir\ ./I<workdir>\ \>\&/dev/null\;\); exit $_EXIT_status;
|
ssh I<sln> \(rm\ -f\ ./I<workdir>/{}\;\ rmdir\ ./I<workdir>\ \>\&/dev/null\;\); exit $_EXIT_status;
|
||||||
|
|
||||||
|
@ -201,14 +213,32 @@ B<$_EXIT_status>: see B<--return> above.
|
||||||
|
|
||||||
=item --pipe
|
=item --pipe
|
||||||
|
|
||||||
sh -c 'dd bs=1 count=1 of=I<tmpfile> 2>/dev/null'; test ! -s "I<tmpfile>" && rm -f "I<tmpfile>" && exec true; (cat I<tmpfile>; rm I<tmpfile>; cat - ) | ( <<input>> );
|
perl -e 'if(sysread(STDIN, $buf, 1)) {
|
||||||
|
open($fh, "|-", "@ARGV") || die;
|
||||||
|
syswrite($fh, $buf);
|
||||||
|
# Align up to 128k block
|
||||||
|
if($read = sysread(STDIN, $buf, 131071)) {
|
||||||
|
syswrite($fh, $buf);
|
||||||
|
}
|
||||||
|
while($read = sysread(STDIN, $buf, 131072)) {
|
||||||
|
syswrite($fh, $buf);
|
||||||
|
}
|
||||||
|
close $fh;
|
||||||
|
exit ($?&127 ? 128+($?&127) : 1+$?>>8)
|
||||||
|
}' I<shell> -c I<input>
|
||||||
|
|
||||||
This small wrapper makes sure that <<input>> will never be run if
|
This small wrapper makes sure that I<input> will never be run if
|
||||||
there is no data. B<sh -c> is needed to hide stderr if the user's
|
there is no data.
|
||||||
shell is B<csh> (which cannot hide stderr).
|
|
||||||
|
|
||||||
=item --tmux
|
=item --tmux
|
||||||
|
|
||||||
|
<<TODO Fixup>>
|
||||||
|
mkfifo /tmp/tmx3cMEV &&
|
||||||
|
sh -c 'tmux -S /tmp/tmsaKpv1 new-session -s p334310 -d "sleep .2" >/dev/null 2>&1';
|
||||||
|
tmux -S /tmp/tmsaKpv1 new-window -t p334310 -n wc\ 10 \(wc\ 10\)\;\ perl\ -e\ \'while\(\$t++\<3\)\{\ print\ \$ARGV\[0\],\"\\n\"\ \}\'\ \$\?h/\$status\ \>\>\ /tmp/tmx3cMEV\&echo\ wc\\\ 10\;\ echo\ \Job\ finished\ at:\ \`date\`\;sleep\ 10;
|
||||||
|
exec perl -e '$/="/";$_=<>;$c=<>;unlink $ARGV; /(\d+)h/ and exit($1);exit$c' /tmp/tmx3cMEV
|
||||||
|
|
||||||
|
|
||||||
mkfifo I<tmpfile.tmx>;
|
mkfifo I<tmpfile.tmx>;
|
||||||
tmux -S <tmpfile.tms> new-session -s pI<PID> -d 'sleep .2' >&/dev/null;
|
tmux -S <tmpfile.tms> new-session -s pI<PID> -d 'sleep .2' >&/dev/null;
|
||||||
tmux -S <tmpfile.tms> new-window -t pI<PID> -n <<shell quoted input>> \(<<shell quoted input>>\)\;\ perl\ -e\ \'while\(\$t++\<3\)\{\ print\ \$ARGV\[0\],\"\\n\"\ \}\'\ \$\?h/\$status\ \>\>\ I<tmpfile.tmx>\&echo\ <<shell double quoted input>>\;echo\ \Job\ finished\ at:\ \`date\`\;sleep\ 10;
|
tmux -S <tmpfile.tms> new-window -t pI<PID> -n <<shell quoted input>> \(<<shell quoted input>>\)\;\ perl\ -e\ \'while\(\$t++\<3\)\{\ print\ \$ARGV\[0\],\"\\n\"\ \}\'\ \$\?h/\$status\ \>\>\ I<tmpfile.tmx>\&echo\ <<shell double quoted input>>\;echo\ \Job\ finished\ at:\ \`date\`\;sleep\ 10;
|
||||||
|
|
|
@ -4,6 +4,25 @@
|
||||||
# Each should be taking 10-30s and be possible to run in parallel
|
# Each should be taking 10-30s and be possible to run in parallel
|
||||||
# I.e.: No race conditions, no logins
|
# I.e.: No race conditions, no logins
|
||||||
cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj0 -k --joblog /tmp/jl-`basename $0` -L1
|
cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj0 -k --joblog /tmp/jl-`basename $0` -L1
|
||||||
|
echo '### bug #46214: Using --pipepart doesnt spawn multiple jobs in version 20150922'
|
||||||
|
seq 1000000 > /tmp/num1000000;
|
||||||
|
stdout parallel --pipepart --progress -a /tmp/num1000000 --block 10k -j0 true |grep 1:local
|
||||||
|
|
||||||
|
echo '**'
|
||||||
|
|
||||||
|
testhalt() {
|
||||||
|
echo '### testhalt --halt '$1;
|
||||||
|
(yes 0 | head -n 10; seq 10) | stdout parallel -kj4 --halt $1 'sleep {= $_=$_*0.3+1 =}; exit {}'; echo $?;
|
||||||
|
(seq 10; yes 0 | head -n 10) | stdout parallel -kj4 --halt $1 'sleep {= $_=$_*0.3+1 =}; exit {}'; echo $?;
|
||||||
|
};
|
||||||
|
export -f testhalt;
|
||||||
|
parallel -kj0 testhalt ::: now,fail=0 now,fail=1 now,fail=2 now,fail=30% now,fail=70%
|
||||||
|
soon,fail=0 soon,fail=1 soon,fail=2 soon,fail=30% soon,fail=70%
|
||||||
|
now,success=0 now,success=1 now,success=2 now,success=30% now,success=70%
|
||||||
|
soon,success=0 soon,success=1 soon,success=2 soon,success=30% now,success=70%
|
||||||
|
|
||||||
|
echo '**'
|
||||||
|
|
||||||
echo '### Test --halt-on-error 0';
|
echo '### Test --halt-on-error 0';
|
||||||
(echo "sleep 1;true"; echo "sleep 2;false";echo "sleep 3;true") | parallel -j10 --halt-on-error 0;
|
(echo "sleep 1;true"; echo "sleep 2;false";echo "sleep 3;true") | parallel -j10 --halt-on-error 0;
|
||||||
echo $?;
|
echo $?;
|
||||||
|
@ -67,23 +86,11 @@ echo '### Test last dying print --halt-on-error -2';
|
||||||
|
|
||||||
echo '**'
|
echo '**'
|
||||||
|
|
||||||
testhalt() {
|
|
||||||
echo '### testhalt --halt '$1;
|
|
||||||
(yes 0 | head -n 10; seq 10) | stdout parallel -kj4 --halt $1 'sleep {= $_=$_*0.3+1 =}; exit {}'; echo $?;
|
|
||||||
(seq 10; yes 0 | head -n 10) | stdout parallel -kj4 --halt $1 'sleep {= $_=$_*0.3+1 =}; exit {}'; echo $?;
|
|
||||||
};
|
|
||||||
export -f testhalt;
|
|
||||||
parallel -kj0 testhalt ::: now,fail=0 now,fail=1 now,fail=2 now,fail=30% now,fail=70%
|
|
||||||
soon,fail=0 soon,fail=1 soon,fail=2 soon,fail=30% soon,fail=70%
|
|
||||||
now,success=0 now,success=1 now,success=2 now,success=30% now,success=70%
|
|
||||||
soon,success=0 soon,success=1 soon,success=2 soon,success=30% now,success=70%
|
|
||||||
|
|
||||||
echo '**'
|
|
||||||
|
|
||||||
echo '### test memfree'
|
echo '### test memfree'
|
||||||
parallel --memfree 1k echo Free mem: ::: 1k
|
parallel --memfree 1k echo Free mem: ::: 1k
|
||||||
stdout parallel --timeout 3 --argsep II parallel --memfree 1t echo Free mem: ::: II 1t
|
stdout parallel --timeout 3 --argsep II parallel --memfree 1t echo Free mem: ::: II 1t
|
||||||
|
|
||||||
echo '**'
|
echo '**'
|
||||||
|
|
||||||
|
|
||||||
EOF
|
EOF
|
||||||
|
|
|
@ -1,152 +1,7 @@
|
||||||
echo '### Test --halt-on-error 0'; (echo "sleep 1;true"; echo "sleep 2;false";echo "sleep 3;true") | parallel -j10 --halt-on-error 0; echo $?; (echo "sleep 1;true"; echo "sleep 2;false";echo "sleep 3;true";echo "sleep 4; non_exist") | parallel -j10 --halt 0; echo $?
|
echo '### bug #46214: Using --pipepart doesnt spawn multiple jobs in version 20150922'
|
||||||
### Test --halt-on-error 0
|
### bug #46214: Using --pipepart doesnt spawn multiple jobs in version 20150922
|
||||||
1
|
seq 1000000 > /tmp/num1000000; stdout parallel --pipepart --progress -a /tmp/num1000000 --block 10k -j0 true |grep 1:local
|
||||||
2
|
1:local / 8 / 252
|
||||||
/bin/bash: non_exist: command not found
|
|
||||||
echo '**'
|
|
||||||
**
|
|
||||||
echo '### Test --halt-on-error 1'; (echo "sleep 1;true"; echo "sleep 2;false";echo "sleep 3;true") | parallel -j10 --halt-on-error 1; echo $?; (echo "sleep 1;true"; echo "sleep 2; non_exist";echo "sleep 3;true";echo "sleep 4; false") | parallel -j10 --halt 1; echo $?
|
|
||||||
### Test --halt-on-error 1
|
|
||||||
1
|
|
||||||
127
|
|
||||||
parallel: This job failed:
|
|
||||||
sleep 2;false
|
|
||||||
parallel: Starting no more jobs. Waiting for 1 jobs to finish.
|
|
||||||
/bin/bash: non_exist: command not found
|
|
||||||
parallel: This job failed:
|
|
||||||
sleep 2; non_exist
|
|
||||||
parallel: Starting no more jobs. Waiting for 2 jobs to finish.
|
|
||||||
parallel: This job failed:
|
|
||||||
sleep 4; false
|
|
||||||
echo '**'
|
|
||||||
**
|
|
||||||
echo '### Test --halt-on-error 2'; (echo "sleep 1;true"; echo "sleep 2;false";echo "sleep 3;true") | parallel -j10 --halt-on-error 2; echo $?; (echo "sleep 1;true"; echo "sleep 2;false";echo "sleep 3;true";echo "sleep 4; non_exist") | parallel -j10 --halt 2; echo $?
|
|
||||||
### Test --halt-on-error 2
|
|
||||||
1
|
|
||||||
1
|
|
||||||
parallel: This job failed:
|
|
||||||
sleep 2;false
|
|
||||||
parallel: This job failed:
|
|
||||||
sleep 2;false
|
|
||||||
echo '**'
|
|
||||||
**
|
|
||||||
echo '### Test --halt -1'; (echo "sleep 1;false"; echo "sleep 2;true";echo "sleep 3;false") | parallel -j10 --halt-on-error -1; echo $?; (echo "sleep 1;false"; echo "sleep 2;true";echo "sleep 3;false";echo "sleep 4; non_exist") | parallel -j10 --halt -1; echo $?
|
|
||||||
### Test --halt -1
|
|
||||||
0
|
|
||||||
0
|
|
||||||
parallel: This job succeeded:
|
|
||||||
sleep 2;true
|
|
||||||
parallel: Starting no more jobs. Waiting for 1 jobs to finish.
|
|
||||||
parallel: This job succeeded:
|
|
||||||
sleep 2;true
|
|
||||||
parallel: Starting no more jobs. Waiting for 2 jobs to finish.
|
|
||||||
/bin/bash: non_exist: command not found
|
|
||||||
echo '**'
|
|
||||||
**
|
|
||||||
echo '### Test --halt -2'; (echo "sleep 1;false"; echo "sleep 2;true";echo "sleep 3;false") | parallel -j10 --halt-on-error -2; echo $?; (echo "sleep 1;false"; echo "sleep 2;true";echo "sleep 3;false";echo "sleep 4; non_exist") | parallel -j10 --halt -2; echo $?
|
|
||||||
### Test --halt -2
|
|
||||||
0
|
|
||||||
0
|
|
||||||
parallel: This job succeeded:
|
|
||||||
sleep 2;true
|
|
||||||
parallel: This job succeeded:
|
|
||||||
sleep 2;true
|
|
||||||
echo '**'
|
|
||||||
**
|
|
||||||
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 $?
|
|
||||||
### Test first dying print --halt-on-error 1
|
|
||||||
exit code 1
|
|
||||||
0
|
|
||||||
parallel: This job failed:
|
|
||||||
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ shift 1
|
|
||||||
parallel: Starting no more jobs. Waiting for 8 jobs to finish.
|
|
||||||
parallel: This job failed:
|
|
||||||
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ shift 2
|
|
||||||
parallel: Starting no more jobs. Waiting for 7 jobs to finish.
|
|
||||||
3
|
|
||||||
0
|
|
||||||
1
|
|
||||||
2
|
|
||||||
parallel: This job failed:
|
|
||||||
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ shift 3
|
|
||||||
parallel: Starting no more jobs. Waiting for 6 jobs to finish.
|
|
||||||
3
|
|
||||||
parallel: This job failed:
|
|
||||||
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ shift 3
|
|
||||||
parallel: Starting no more jobs. Waiting for 5 jobs to finish.
|
|
||||||
4
|
|
||||||
parallel: This job failed:
|
|
||||||
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ shift 4
|
|
||||||
parallel: Starting no more jobs. Waiting for 4 jobs to finish.
|
|
||||||
5
|
|
||||||
parallel: This job failed:
|
|
||||||
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ shift 5
|
|
||||||
parallel: Starting no more jobs. Waiting for 3 jobs to finish.
|
|
||||||
6
|
|
||||||
parallel: This job failed:
|
|
||||||
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ shift 6
|
|
||||||
parallel: Starting no more jobs. Waiting for 2 jobs to finish.
|
|
||||||
7
|
|
||||||
0
|
|
||||||
parallel: This job failed:
|
|
||||||
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ shift 7
|
|
||||||
parallel: Starting no more jobs. Waiting for 1 jobs to finish.
|
|
||||||
8
|
|
||||||
parallel: This job failed:
|
|
||||||
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ shift 8
|
|
||||||
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 $?
|
|
||||||
### Test last dying print --halt-on-error 2
|
|
||||||
exit code 1
|
|
||||||
0
|
|
||||||
parallel: This job failed:
|
|
||||||
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ shift 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 $?
|
|
||||||
### Test last dying print --halt-on-error -1
|
|
||||||
exit code 0
|
|
||||||
0
|
|
||||||
parallel: This job succeeded:
|
|
||||||
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ not\ shift 1
|
|
||||||
parallel: Starting no more jobs. Waiting for 8 jobs to finish.
|
|
||||||
parallel: This job succeeded:
|
|
||||||
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ not\ shift 2
|
|
||||||
parallel: Starting no more jobs. Waiting for 7 jobs to finish.
|
|
||||||
3
|
|
||||||
0
|
|
||||||
1
|
|
||||||
2
|
|
||||||
parallel: This job succeeded:
|
|
||||||
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ not\ shift 3
|
|
||||||
parallel: Starting no more jobs. Waiting for 6 jobs to finish.
|
|
||||||
3
|
|
||||||
parallel: This job succeeded:
|
|
||||||
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ not\ shift 3
|
|
||||||
parallel: Starting no more jobs. Waiting for 5 jobs to finish.
|
|
||||||
4
|
|
||||||
parallel: This job succeeded:
|
|
||||||
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ not\ shift 4
|
|
||||||
parallel: Starting no more jobs. Waiting for 4 jobs to finish.
|
|
||||||
5
|
|
||||||
parallel: This job succeeded:
|
|
||||||
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ not\ shift 5
|
|
||||||
parallel: Starting no more jobs. Waiting for 3 jobs to finish.
|
|
||||||
6
|
|
||||||
parallel: This job succeeded:
|
|
||||||
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ not\ shift 6
|
|
||||||
parallel: Starting no more jobs. Waiting for 2 jobs to finish.
|
|
||||||
7
|
|
||||||
0
|
|
||||||
parallel: This job succeeded:
|
|
||||||
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ not\ shift 7
|
|
||||||
parallel: Starting no more jobs. Waiting for 1 jobs to finish.
|
|
||||||
8
|
|
||||||
parallel: This job succeeded:
|
|
||||||
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ not\ shift 8
|
|
||||||
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 $?
|
|
||||||
### Test last dying print --halt-on-error -2
|
|
||||||
exit code 0
|
|
||||||
0
|
|
||||||
parallel: This job succeeded:
|
|
||||||
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ not\ shift 1
|
|
||||||
echo '**'
|
echo '**'
|
||||||
**
|
**
|
||||||
testhalt() { echo '### testhalt --halt '$1; (yes 0 | head -n 10; seq 10) | stdout parallel -kj4 --halt $1 'sleep {= $_=$_*0.3+1 =}; exit {}'; echo $?; (seq 10; yes 0 | head -n 10) | stdout parallel -kj4 --halt $1 'sleep {= $_=$_*0.3+1 =}; exit {}'; echo $?; }; export -f testhalt; parallel -kj0 testhalt ::: now,fail=0 now,fail=1 now,fail=2 now,fail=30% now,fail=70% soon,fail=0 soon,fail=1 soon,fail=2 soon,fail=30% soon,fail=70% now,success=0 now,success=1 now,success=2 now,success=30% now,success=70% soon,success=0 soon,success=1 soon,success=2 soon,success=30% now,success=70%
|
testhalt() { echo '### testhalt --halt '$1; (yes 0 | head -n 10; seq 10) | stdout parallel -kj4 --halt $1 'sleep {= $_=$_*0.3+1 =}; exit {}'; echo $?; (seq 10; yes 0 | head -n 10) | stdout parallel -kj4 --halt $1 'sleep {= $_=$_*0.3+1 =}; exit {}'; echo $?; }; export -f testhalt; parallel -kj0 testhalt ::: now,fail=0 now,fail=1 now,fail=2 now,fail=30% now,fail=70% soon,fail=0 soon,fail=1 soon,fail=2 soon,fail=30% soon,fail=70% now,success=0 now,success=1 now,success=2 now,success=30% now,success=70% soon,success=0 soon,success=1 soon,success=2 soon,success=30% now,success=70%
|
||||||
|
@ -661,6 +516,157 @@ sleep 1; exit 0
|
||||||
50
|
50
|
||||||
echo '**'
|
echo '**'
|
||||||
**
|
**
|
||||||
|
echo '### Test --halt-on-error 0'; (echo "sleep 1;true"; echo "sleep 2;false";echo "sleep 3;true") | parallel -j10 --halt-on-error 0; echo $?; (echo "sleep 1;true"; echo "sleep 2;false";echo "sleep 3;true";echo "sleep 4; non_exist") | parallel -j10 --halt 0; echo $?
|
||||||
|
### Test --halt-on-error 0
|
||||||
|
1
|
||||||
|
2
|
||||||
|
/bin/bash: non_exist: command not found
|
||||||
|
echo '**'
|
||||||
|
**
|
||||||
|
echo '### Test --halt-on-error 1'; (echo "sleep 1;true"; echo "sleep 2;false";echo "sleep 3;true") | parallel -j10 --halt-on-error 1; echo $?; (echo "sleep 1;true"; echo "sleep 2; non_exist";echo "sleep 3;true";echo "sleep 4; false") | parallel -j10 --halt 1; echo $?
|
||||||
|
### Test --halt-on-error 1
|
||||||
|
1
|
||||||
|
127
|
||||||
|
parallel: This job failed:
|
||||||
|
sleep 2;false
|
||||||
|
parallel: Starting no more jobs. Waiting for 1 jobs to finish.
|
||||||
|
/bin/bash: non_exist: command not found
|
||||||
|
parallel: This job failed:
|
||||||
|
sleep 2; non_exist
|
||||||
|
parallel: Starting no more jobs. Waiting for 2 jobs to finish.
|
||||||
|
parallel: This job failed:
|
||||||
|
sleep 4; false
|
||||||
|
echo '**'
|
||||||
|
**
|
||||||
|
echo '### Test --halt-on-error 2'; (echo "sleep 1;true"; echo "sleep 2;false";echo "sleep 3;true") | parallel -j10 --halt-on-error 2; echo $?; (echo "sleep 1;true"; echo "sleep 2;false";echo "sleep 3;true";echo "sleep 4; non_exist") | parallel -j10 --halt 2; echo $?
|
||||||
|
### Test --halt-on-error 2
|
||||||
|
1
|
||||||
|
1
|
||||||
|
parallel: This job failed:
|
||||||
|
sleep 2;false
|
||||||
|
parallel: This job failed:
|
||||||
|
sleep 2;false
|
||||||
|
echo '**'
|
||||||
|
**
|
||||||
|
echo '### Test --halt -1'; (echo "sleep 1;false"; echo "sleep 2;true";echo "sleep 3;false") | parallel -j10 --halt-on-error -1; echo $?; (echo "sleep 1;false"; echo "sleep 2;true";echo "sleep 3;false";echo "sleep 4; non_exist") | parallel -j10 --halt -1; echo $?
|
||||||
|
### Test --halt -1
|
||||||
|
0
|
||||||
|
0
|
||||||
|
parallel: This job succeeded:
|
||||||
|
sleep 2;true
|
||||||
|
parallel: Starting no more jobs. Waiting for 1 jobs to finish.
|
||||||
|
parallel: This job succeeded:
|
||||||
|
sleep 2;true
|
||||||
|
parallel: Starting no more jobs. Waiting for 2 jobs to finish.
|
||||||
|
/bin/bash: non_exist: command not found
|
||||||
|
echo '**'
|
||||||
|
**
|
||||||
|
echo '### Test --halt -2'; (echo "sleep 1;false"; echo "sleep 2;true";echo "sleep 3;false") | parallel -j10 --halt-on-error -2; echo $?; (echo "sleep 1;false"; echo "sleep 2;true";echo "sleep 3;false";echo "sleep 4; non_exist") | parallel -j10 --halt -2; echo $?
|
||||||
|
### Test --halt -2
|
||||||
|
0
|
||||||
|
0
|
||||||
|
parallel: This job succeeded:
|
||||||
|
sleep 2;true
|
||||||
|
parallel: This job succeeded:
|
||||||
|
sleep 2;true
|
||||||
|
echo '**'
|
||||||
|
**
|
||||||
|
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 $?
|
||||||
|
### Test first dying print --halt-on-error 1
|
||||||
|
exit code 1
|
||||||
|
0
|
||||||
|
parallel: This job failed:
|
||||||
|
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ shift 1
|
||||||
|
parallel: Starting no more jobs. Waiting for 8 jobs to finish.
|
||||||
|
parallel: This job failed:
|
||||||
|
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ shift 2
|
||||||
|
parallel: Starting no more jobs. Waiting for 7 jobs to finish.
|
||||||
|
3
|
||||||
|
0
|
||||||
|
1
|
||||||
|
2
|
||||||
|
parallel: This job failed:
|
||||||
|
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ shift 3
|
||||||
|
parallel: Starting no more jobs. Waiting for 6 jobs to finish.
|
||||||
|
3
|
||||||
|
parallel: This job failed:
|
||||||
|
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ shift 3
|
||||||
|
parallel: Starting no more jobs. Waiting for 5 jobs to finish.
|
||||||
|
4
|
||||||
|
parallel: This job failed:
|
||||||
|
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ shift 4
|
||||||
|
parallel: Starting no more jobs. Waiting for 4 jobs to finish.
|
||||||
|
5
|
||||||
|
parallel: This job failed:
|
||||||
|
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ shift 5
|
||||||
|
parallel: Starting no more jobs. Waiting for 3 jobs to finish.
|
||||||
|
6
|
||||||
|
parallel: This job failed:
|
||||||
|
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ shift 6
|
||||||
|
parallel: Starting no more jobs. Waiting for 2 jobs to finish.
|
||||||
|
7
|
||||||
|
0
|
||||||
|
parallel: This job failed:
|
||||||
|
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ shift 7
|
||||||
|
parallel: Starting no more jobs. Waiting for 1 jobs to finish.
|
||||||
|
8
|
||||||
|
parallel: This job failed:
|
||||||
|
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ shift 8
|
||||||
|
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 $?
|
||||||
|
### Test last dying print --halt-on-error 2
|
||||||
|
exit code 1
|
||||||
|
0
|
||||||
|
parallel: This job failed:
|
||||||
|
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ shift 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 $?
|
||||||
|
### Test last dying print --halt-on-error -1
|
||||||
|
exit code 0
|
||||||
|
0
|
||||||
|
parallel: This job succeeded:
|
||||||
|
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ not\ shift 1
|
||||||
|
parallel: Starting no more jobs. Waiting for 8 jobs to finish.
|
||||||
|
parallel: This job succeeded:
|
||||||
|
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ not\ shift 2
|
||||||
|
parallel: Starting no more jobs. Waiting for 7 jobs to finish.
|
||||||
|
3
|
||||||
|
0
|
||||||
|
1
|
||||||
|
2
|
||||||
|
parallel: This job succeeded:
|
||||||
|
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ not\ shift 3
|
||||||
|
parallel: Starting no more jobs. Waiting for 6 jobs to finish.
|
||||||
|
3
|
||||||
|
parallel: This job succeeded:
|
||||||
|
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ not\ shift 3
|
||||||
|
parallel: Starting no more jobs. Waiting for 5 jobs to finish.
|
||||||
|
4
|
||||||
|
parallel: This job succeeded:
|
||||||
|
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ not\ shift 4
|
||||||
|
parallel: Starting no more jobs. Waiting for 4 jobs to finish.
|
||||||
|
5
|
||||||
|
parallel: This job succeeded:
|
||||||
|
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ not\ shift 5
|
||||||
|
parallel: Starting no more jobs. Waiting for 3 jobs to finish.
|
||||||
|
6
|
||||||
|
parallel: This job succeeded:
|
||||||
|
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ not\ shift 6
|
||||||
|
parallel: Starting no more jobs. Waiting for 2 jobs to finish.
|
||||||
|
7
|
||||||
|
0
|
||||||
|
parallel: This job succeeded:
|
||||||
|
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ not\ shift 7
|
||||||
|
parallel: Starting no more jobs. Waiting for 1 jobs to finish.
|
||||||
|
8
|
||||||
|
parallel: This job succeeded:
|
||||||
|
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ not\ shift 8
|
||||||
|
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 $?
|
||||||
|
### Test last dying print --halt-on-error -2
|
||||||
|
exit code 0
|
||||||
|
0
|
||||||
|
parallel: This job succeeded:
|
||||||
|
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ not\ shift 1
|
||||||
|
echo '**'
|
||||||
|
**
|
||||||
echo '### test memfree'
|
echo '### test memfree'
|
||||||
### test memfree
|
### test memfree
|
||||||
parallel --memfree 1k echo Free mem: ::: 1k
|
parallel --memfree 1k echo Free mem: ::: 1k
|
||||||
|
|
Loading…
Reference in a new issue