mirror of
https://git.savannah.gnu.org/git/parallel.git
synced 2024-12-25 06:07:54 +00:00
Released as 20151022 ('LiquidWater')
This commit is contained in:
parent
b244ddf7ca
commit
5be0293a96
37
NEWS
37
NEWS
|
@ -1,3 +1,40 @@
|
|||
20151022
|
||||
|
||||
* --plus makes it possible to use {##} as a short had for {=
|
||||
$_=$Global::JobQueue->total_jobs() =} which gives the the number of
|
||||
jobs to run.
|
||||
|
||||
* {= $_=$Global::JobQueue->total_jobs() =} is incompatible with -X,
|
||||
-m, and --xargs.
|
||||
|
||||
* GNU Parallel is now mostly compatible with lsh
|
||||
(http://www.lysator.liu.se/~nisse/lsh/) and somewhat compatible with
|
||||
autossh (http://www.harding.motd.ca/autossh/).
|
||||
|
||||
* --workdir ... now also works when run locally.
|
||||
|
||||
* GNU Parallel was cited in: There is no (75, 32, 10, 16) strongly
|
||||
regular graph http://arxiv.org/pdf/1509.05933.pdf
|
||||
|
||||
* GNU Parallel was cited in: Roary: rapid large-scale prokaryote pan
|
||||
genome analysis
|
||||
http://bioinformatics.oxfordjournals.org/content/early/2015/08/05/bioinformatics.btv421.full.pdf+html
|
||||
|
||||
* GNU Parallel is used in TraitAR:
|
||||
https://testpypi.python.org/pypi/traitar/0.1.4
|
||||
|
||||
* GNU Parallel is used in youtube-dl-parallel:
|
||||
https://github.com/dlh/youtube-dl-parallel
|
||||
|
||||
* A parallel and fast way to download multiple files
|
||||
http://onetipperday.blogspot.com/2015/10/a-parallel-and-fast-way-to-download.html
|
||||
|
||||
* Usar GNU Parallel para aumentar el rendimiento de tus scripts
|
||||
http://adrianarroyocalle.github.io/blog/2015/10/20/usar-gnu-parallel/
|
||||
|
||||
* Bug fixes and man page updates.
|
||||
|
||||
|
||||
20150922
|
||||
|
||||
* GNU Parallel was cited in: Flexible Modeling of Epidemics with an Empirical Bayes Framework http://journals.plos.org/ploscompbiol/article?id=10.1371%2Fjournal.pcbi.1004382
|
||||
|
|
12
README
12
README
|
@ -40,9 +40,9 @@ document.
|
|||
|
||||
Full installation of GNU Parallel is as simple as:
|
||||
|
||||
wget http://ftpmirror.gnu.org/parallel/parallel-20150922.tar.bz2
|
||||
bzip2 -dc parallel-20150922.tar.bz2 | tar xvf -
|
||||
cd parallel-20150922
|
||||
wget http://ftpmirror.gnu.org/parallel/parallel-20151022.tar.bz2
|
||||
bzip2 -dc parallel-20151022.tar.bz2 | tar xvf -
|
||||
cd parallel-20151022
|
||||
./configure && make && sudo make install
|
||||
|
||||
|
||||
|
@ -51,9 +51,9 @@ 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 http://ftpmirror.gnu.org/parallel/parallel-20150922.tar.bz2
|
||||
bzip2 -dc parallel-20150922.tar.bz2 | tar xvf -
|
||||
cd parallel-20150922
|
||||
wget http://ftpmirror.gnu.org/parallel/parallel-20151022.tar.bz2
|
||||
bzip2 -dc parallel-20151022.tar.bz2 | tar xvf -
|
||||
cd parallel-20151022
|
||||
./configure --prefix=$HOME && make && make install
|
||||
|
||||
Or if your system lacks 'make' you can simply copy src/parallel
|
||||
|
|
20
configure
vendored
20
configure
vendored
|
@ -1,6 +1,6 @@
|
|||
#! /bin/sh
|
||||
# Guess values for system-dependent variables and create Makefiles.
|
||||
# Generated by GNU Autoconf 2.69 for parallel 20150922.
|
||||
# Generated by GNU Autoconf 2.69 for parallel 20151022.
|
||||
#
|
||||
# Report bugs to <bug-parallel@gnu.org>.
|
||||
#
|
||||
|
@ -579,8 +579,8 @@ MAKEFLAGS=
|
|||
# Identity of this package.
|
||||
PACKAGE_NAME='parallel'
|
||||
PACKAGE_TARNAME='parallel'
|
||||
PACKAGE_VERSION='20150922'
|
||||
PACKAGE_STRING='parallel 20150922'
|
||||
PACKAGE_VERSION='20151022'
|
||||
PACKAGE_STRING='parallel 20151022'
|
||||
PACKAGE_BUGREPORT='bug-parallel@gnu.org'
|
||||
PACKAGE_URL=''
|
||||
|
||||
|
@ -1203,7 +1203,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 20150922 to adapt to many kinds of systems.
|
||||
\`configure' configures parallel 20151022 to adapt to many kinds of systems.
|
||||
|
||||
Usage: $0 [OPTION]... [VAR=VALUE]...
|
||||
|
||||
|
@ -1269,7 +1269,7 @@ fi
|
|||
|
||||
if test -n "$ac_init_help"; then
|
||||
case $ac_init_help in
|
||||
short | recursive ) echo "Configuration of parallel 20150922:";;
|
||||
short | recursive ) echo "Configuration of parallel 20151022:";;
|
||||
esac
|
||||
cat <<\_ACEOF
|
||||
|
||||
|
@ -1345,7 +1345,7 @@ fi
|
|||
test -n "$ac_init_help" && exit $ac_status
|
||||
if $ac_init_version; then
|
||||
cat <<\_ACEOF
|
||||
parallel configure 20150922
|
||||
parallel configure 20151022
|
||||
generated by GNU Autoconf 2.69
|
||||
|
||||
Copyright (C) 2012 Free Software Foundation, Inc.
|
||||
|
@ -1362,7 +1362,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 20150922, which was
|
||||
It was created by parallel $as_me 20151022, which was
|
||||
generated by GNU Autoconf 2.69. Invocation command line was
|
||||
|
||||
$ $0 $@
|
||||
|
@ -2225,7 +2225,7 @@ fi
|
|||
|
||||
# Define the identity of the package.
|
||||
PACKAGE='parallel'
|
||||
VERSION='20150922'
|
||||
VERSION='20151022'
|
||||
|
||||
|
||||
cat >>confdefs.h <<_ACEOF
|
||||
|
@ -2867,7 +2867,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 20150922, which was
|
||||
This file was extended by parallel $as_me 20151022, which was
|
||||
generated by GNU Autoconf 2.69. Invocation command line was
|
||||
|
||||
CONFIG_FILES = $CONFIG_FILES
|
||||
|
@ -2929,7 +2929,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 20150922
|
||||
parallel config.status 20151022
|
||||
configured by $0, generated by GNU Autoconf 2.69,
|
||||
with options \\"\$ac_cs_config\\"
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
AC_INIT([parallel], [20150922], [bug-parallel@gnu.org])
|
||||
AC_INIT([parallel], [20151022], [bug-parallel@gnu.org])
|
||||
AM_INIT_AUTOMAKE([-Wall -Werror foreign])
|
||||
AC_CONFIG_HEADERS([config.h])
|
||||
AC_CONFIG_FILES([
|
||||
|
|
|
@ -220,7 +220,9 @@ GNU Parallel 20151022 ('Liquid Water') <<[stable]>> has been released. It is ava
|
|||
|
||||
Haiku of the month:
|
||||
|
||||
<<>>
|
||||
In parallel land
|
||||
everything is quick and fast
|
||||
Use GNU Parallel.
|
||||
-- Ole Tange
|
||||
|
||||
New in this release:
|
||||
|
@ -234,6 +236,14 @@ New in this release:
|
|||
* <<kontaktet 2015-06-22 Afventer svar fra journal>> GNU Parallel was used (unfortunately with wrong citation) in: TADSim: Discrete Event-Based Performance Prediction for Temperature-Accelerated Dynamics http://vruehle.de/publications/2015c.pdf
|
||||
http://www.researchgate.net/profile/Christoph_Junghans/publication/276178326_TADSim_Discrete_Event-Based_Performance_Prediction_for_Temperature-Accelerated_Dynamics/links/55562b6708ae980ca60c8369.pdf
|
||||
|
||||
* --plus makes it possible to use {##} as a short had for {= $_=$Global::JobQueue->total_jobs() =} which gives the the number of jobs to run.
|
||||
|
||||
* {= $_=$Global::JobQueue->total_jobs() =} is incompatible with -X, -m, and --xargs.
|
||||
|
||||
* GNU Parallel is now mostly compatible with lsh (http://www.lysator.liu.se/~nisse/lsh/) and somewhat compatible with autossh (http://www.harding.motd.ca/autossh/).
|
||||
|
||||
* --workdir ... now also works when run locally.
|
||||
|
||||
* GNU Parallel was cited in: There is no (75, 32, 10, 16) strongly regular graph http://arxiv.org/pdf/1509.05933.pdf
|
||||
|
||||
* GNU Parallel was cited in: Roary: rapid large-scale prokaryote pan genome analysis http://bioinformatics.oxfordjournals.org/content/early/2015/08/05/bioinformatics.btv421.full.pdf+html
|
||||
|
@ -244,6 +254,8 @@ http://www.researchgate.net/profile/Christoph_Junghans/publication/276178326_TAD
|
|||
|
||||
* A parallel and fast way to download multiple files http://onetipperday.blogspot.com/2015/10/a-parallel-and-fast-way-to-download.html
|
||||
|
||||
* Usar GNU Parallel para aumentar el rendimiento de tus scripts http://adrianarroyocalle.github.io/blog/2015/10/20/usar-gnu-parallel/
|
||||
|
||||
* Bug fixes and man page updates.
|
||||
|
||||
GNU Parallel - For people who live life in the parallel lane.
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
Summary: Shell tool for executing jobs in parallel
|
||||
Name: parallel
|
||||
Version: 20150922
|
||||
Version: 20151022
|
||||
Release: 1
|
||||
License: GPL
|
||||
Group: Productivity/File utilities
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
use strict;
|
||||
use Getopt::Long;
|
||||
$Global::progname="niceload";
|
||||
$Global::version = 20150922;
|
||||
$Global::version = 20151022;
|
||||
Getopt::Long::Configure("bundling","require_order");
|
||||
get_options_from_array(\@ARGV) || die_usage();
|
||||
if($opt::version) {
|
||||
|
|
|
@ -1100,7 +1100,7 @@ sub parse_options {
|
|||
|
||||
sub init_globals {
|
||||
# Defaults:
|
||||
$Global::version = 20151001;
|
||||
$Global::version = 20151022;
|
||||
$Global::progname = 'parallel';
|
||||
$Global::infinity = 2**31;
|
||||
$Global::debug = 0;
|
||||
|
|
|
@ -426,7 +426,7 @@ string that is not in the command line.
|
|||
See also: B<:::>.
|
||||
|
||||
|
||||
=item B<--bar>
|
||||
=item B<--bar> (alpha testing)
|
||||
|
||||
Show progress as a progress bar. In the bar is shown: % of jobs
|
||||
completed, estimated seconds left, and number of jobs started.
|
||||
|
@ -513,7 +513,7 @@ I<size> defaults to 1M.
|
|||
See B<--pipe> and B<--pipepart> for use of this.
|
||||
|
||||
|
||||
=item B<--cat>
|
||||
=item B<--cat> (alpha testing)
|
||||
|
||||
Create a temporary file with content. Normally B<--pipe>/B<--pipepart>
|
||||
will give data to the program on stdin (standard input). With B<--cat>
|
||||
|
@ -613,7 +613,7 @@ I<secs> seconds after starting each job. I<secs> can be less than 1
|
|||
second.
|
||||
|
||||
|
||||
=item B<--dry-run>
|
||||
=item B<--dry-run> (alpha testing)
|
||||
|
||||
Print the job to run on stdout (standard output), but do not run the
|
||||
job. Use B<-v -v> to include the wrapping that GNU Parallel generates
|
||||
|
@ -672,7 +672,7 @@ and functions) use env_parallel as described under the option I<command>.
|
|||
See also: B<--record-env>.
|
||||
|
||||
|
||||
=item B<--eta>
|
||||
=item B<--eta> (alpha testing)
|
||||
|
||||
Show the estimated number of seconds before finishing. This forces GNU
|
||||
B<parallel> to read all jobs before starting to find the number of
|
||||
|
@ -693,7 +693,7 @@ Implies B<--semaphore>.
|
|||
See also B<--bg>, B<man sem>.
|
||||
|
||||
|
||||
=item B<--fifo>
|
||||
=item B<--fifo> (alpha testing)
|
||||
|
||||
Create a temporary fifo with content. Normally B<--pipe> and
|
||||
B<--pipepart> will give data to the program on stdin (standard
|
||||
|
@ -725,7 +725,7 @@ over B<--tollef>. The B<--tollef> option is now retired, and therefore
|
|||
may not be used. B<--gnu> is kept for compatibility.
|
||||
|
||||
|
||||
=item B<--group>
|
||||
=item B<--group> (alpha testing)
|
||||
|
||||
Group output. Output from each jobs is grouped together and is only
|
||||
printed when the command is finished. stderr (standard error) first
|
||||
|
@ -747,9 +747,9 @@ See also: B<--line-buffer> B<--ungroup>
|
|||
Print a summary of the options to GNU B<parallel> and exit.
|
||||
|
||||
|
||||
=item B<--halt-on-error> I<val>
|
||||
=item B<--halt-on-error> I<val> (alpha testing)
|
||||
|
||||
=item B<--halt> I<val>
|
||||
=item B<--halt> I<val> (alpha testing)
|
||||
|
||||
When should GNU B<parallel> terminate? In some situations it makes no
|
||||
sense to run all jobs. GNU B<parallel> should simply give up as soon
|
||||
|
@ -1172,7 +1172,7 @@ performance is important use B<--pipepart>.
|
|||
See also: B<--recstart>, B<--recend>, B<--fifo>, B<--cat>, B<--pipepart>.
|
||||
|
||||
|
||||
=item B<--pipepart>
|
||||
=item B<--pipepart> (alpha testing)
|
||||
|
||||
Pipe parts of a physical file. B<--pipepart> works similar to
|
||||
B<--pipe>, but is much faster. It has a few limitations:
|
||||
|
@ -1288,7 +1288,7 @@ Overrides an earlier B<--keep-order> (e.g. if set in
|
|||
B<~/.parallel/config>).
|
||||
|
||||
|
||||
=item B<--nice> I<niceness>
|
||||
=item B<--nice> I<niceness> (alpha testing)
|
||||
|
||||
Run the command at this niceness. For simple commands you can just add
|
||||
B<nice> in front of the command. But if the command consists of more
|
||||
|
@ -1737,7 +1737,7 @@ Does not run the command but quotes it. Useful for making quoted
|
|||
composed commands for GNU B<parallel>.
|
||||
|
||||
|
||||
=item B<--shuf>
|
||||
=item B<--shuf> (alpha testing)
|
||||
|
||||
Shuffle jobs. When having multiple input sources it is hard to
|
||||
randomize jobs. --shuf will generate all jobs, and shuffle them before
|
||||
|
@ -1765,13 +1765,13 @@ I<secs> seconds after starting each ssh. I<secs> can be less than 1
|
|||
seconds.
|
||||
|
||||
|
||||
=item B<-S> I<[@hostgroups/][ncpu/]sshlogin[,[@hostgroups/][ncpu/]sshlogin[,...]]>
|
||||
=item B<-S> I<[@hostgroups/][ncpu/]sshlogin[,[@hostgroups/][ncpu/]sshlogin[,...]]> (alpha testing)
|
||||
|
||||
=item B<-S> I<@hostgroup>
|
||||
=item B<-S> I<@hostgroup> (alpha testing)
|
||||
|
||||
=item B<--sshlogin> I<[@hostgroups/][ncpu/]sshlogin[,[@hostgroups/][ncpu/]sshlogin[,...]]>
|
||||
=item B<--sshlogin> I<[@hostgroups/][ncpu/]sshlogin[,[@hostgroups/][ncpu/]sshlogin[,...]]> (alpha testing)
|
||||
|
||||
=item B<--sshlogin> I<@hostgroup>
|
||||
=item B<--sshlogin> I<@hostgroup> (alpha testing)
|
||||
|
||||
Distribute jobs to remote computers. The jobs will be run on a list of
|
||||
remote computers.
|
||||
|
@ -2088,9 +2088,9 @@ Use B<-v> B<-v> to print the wrapping ssh command when running remotely.
|
|||
Print the version GNU B<parallel> and exit.
|
||||
|
||||
|
||||
=item B<--workdir> I<mydir>
|
||||
=item B<--workdir> I<mydir> (alpha testing)
|
||||
|
||||
=item B<--wd> I<mydir>
|
||||
=item B<--wd> I<mydir> (alpha testing)
|
||||
|
||||
Files transferred using B<--transfer> and B<--return> will be relative
|
||||
to I<mydir> on remote computers, and the command will be executed in
|
||||
|
|
|
@ -129,11 +129,9 @@ echo I<shell double quoted input>
|
|||
|
||||
=item --nice I<pri>
|
||||
|
||||
\nice -n I<pri> I<shell> -c I<shell quoted input>
|
||||
Remote: See B<The remote system wrapper>.
|
||||
|
||||
The \ is needed to avoid using the builtin nice command, which does not
|
||||
support -n in B<tcsh>. B<I<shell> -c> is needed to nice composed commands
|
||||
command.
|
||||
Local: B<setpriority(0,0,$nice)>
|
||||
|
||||
=item --cat
|
||||
|
||||
|
@ -374,7 +372,12 @@ the %%-version, and the function definition works on both pre- and
|
|||
post-shellshock versions of B<bash>.
|
||||
|
||||
|
||||
=head2 Remote Ctrl-C and standard error (stderr)
|
||||
=head2 The remote system wrapper
|
||||
|
||||
The remote system wrapper does some initialization before starting the
|
||||
command on the remote system.
|
||||
|
||||
=head3 Ctrl-C and standard error (stderr)
|
||||
|
||||
If the user presses Ctrl-C the user expects jobs to stop. This works
|
||||
out of the box if the jobs are run locally. Unfortunately it is not so
|
||||
|
@ -394,28 +397,51 @@ propagate the hang-up signal from B<sshd>. But when B<sshd> dies, the
|
|||
parent of the login shell becomes B<init> (process id 1). So by
|
||||
exec'ing a Perl wrapper to monitor the parent pid and kill the child
|
||||
if the parent pid becomes 1, then Ctrl-C works and stderr is kept on
|
||||
stderr. The wrapper looks like this:
|
||||
stderr.
|
||||
|
||||
=head3 --nice
|
||||
|
||||
B<nice>ing the remote process is done by B<setpriority(0,0,$nice)>. A
|
||||
few old systems do not implement this and is thus unsupported.
|
||||
|
||||
=head3 Setting $PARALLEL_TMP
|
||||
|
||||
B<$PARALLEL_TMP> is used by B<--fifo> and B<--cat> and must point to a
|
||||
non-exitent file in B<$TMPDIR>. This file name is computed on the
|
||||
remote system.
|
||||
|
||||
=head3 The wrapper
|
||||
|
||||
The wrapper looks like this:
|
||||
|
||||
$shell = $PARALLEL_SHELL || $SHELL;
|
||||
$tmpdir = $TMPDIR;
|
||||
$nice = $opt::nice;
|
||||
# Set $PARALLEL_TMP to a non-existent file name in $TMPDIR
|
||||
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) {
|
||||
# Make own process group to be able to kill HUP it later
|
||||
setpgrp;
|
||||
exec $ENV{SHELL}, "-c", ($bashfunc."@ARGV");
|
||||
die "exec: $!\n";
|
||||
# Make own process group to be able to kill HUP it later
|
||||
setpgrp;
|
||||
eval { setpriority(0,0,$nice) };
|
||||
exec $shell, "-c", ($bashfunc."@ARGV");
|
||||
die "exec: $!\n";
|
||||
}
|
||||
do {
|
||||
# Parent is not init (ppid=1), so sshd is alive
|
||||
# Exponential sleep up to 1 sec
|
||||
$s = $s < 1 ? 0.001 + $s * 1.03 : $s;
|
||||
select(undef, undef, undef, $s);
|
||||
# Parent is not init (ppid=1), so sshd is alive
|
||||
# Exponential sleep up to 1 sec
|
||||
$s = $s < 1 ? 0.001 + $s * 1.03 : $s;
|
||||
select(undef, undef, undef, $s);
|
||||
} until ($done || getppid == 1);
|
||||
# Kill HUP the process group if job not done
|
||||
kill(SIGHUP, -${pid}) unless $done;
|
||||
wait;
|
||||
exit ($?&127 ? 128+($?&127) : 1+$?>>8)
|
||||
|
||||
|
||||
=head2 Transferring of variables and functions
|
||||
|
||||
Transferring of variables and functions given by B<--env> is done by
|
||||
|
|
Loading…
Reference in a new issue