diff --git a/NEWS b/NEWS index 31386216..cb1895f5 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,26 @@ +20190322 + +* SIGTERM is changed to SIGHUP, so sending SIGHUP will make GNU + Parallel start no more jobs, but wait for running jobs to finish. + +* SIGTERM SIGTERM is changed to SIGTERM, so sending SIGTERM will make + GNU Parallel kill all running jobs. + +* GNU Parallel now includes a cheat sheet: parallel_cheat.pdf + +* High Throughput Computing on RMACC Summit and Beyond + https://calendar.colorado.edu/event/high_throughput_computing_on_rmacc_summit_and_beyond#.XH2NBhB7mV4 + +* GNU Parallel Cheat Sheet by cpriest + https://www.cheatography.com/cpriest/cheat-sheets/gnu-parallel/ + +* Use Multiple CPU Cores(Parallelize) with Single Threaded Linux + Commands + http://xensoft.com/use-multiple-cpu-cores-parallelize-with-single-threaded-linux-commands/ + +* Bug fixes and man page updates. + + 20190222 * --shard makes it possible to send input to a the same jobslot based diff --git a/README b/README index 16f339f2..f832ac33 100644 --- a/README +++ b/README @@ -44,9 +44,9 @@ document. Full installation of GNU Parallel is as simple as: - wget https://ftpmirror.gnu.org/parallel/parallel-20190222.tar.bz2 - bzip2 -dc parallel-20190222.tar.bz2 | tar xvf - - cd parallel-20190222 + wget https://ftpmirror.gnu.org/parallel/parallel-20190322.tar.bz2 + bzip2 -dc parallel-20190322.tar.bz2 | tar xvf - + cd parallel-20190322 ./configure && make && sudo make install @@ -55,9 +55,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 https://ftpmirror.gnu.org/parallel/parallel-20190222.tar.bz2 - bzip2 -dc parallel-20190222.tar.bz2 | tar xvf - - cd parallel-20190222 + wget https://ftpmirror.gnu.org/parallel/parallel-20190322.tar.bz2 + bzip2 -dc parallel-20190322.tar.bz2 | tar xvf - + cd parallel-20190322 ./configure --prefix=$HOME && make && make install Or if your system lacks 'make' you can simply copy src/parallel diff --git a/configure b/configure index c711473a..8281d6e1 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for parallel 20190310. +# Generated by GNU Autoconf 2.69 for parallel 20190322. # # Report bugs to . # @@ -579,8 +579,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='parallel' PACKAGE_TARNAME='parallel' -PACKAGE_VERSION='20190310' -PACKAGE_STRING='parallel 20190310' +PACKAGE_VERSION='20190322' +PACKAGE_STRING='parallel 20190322' 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 20190310 to adapt to many kinds of systems. +\`configure' configures parallel 20190322 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 20190310:";; + short | recursive ) echo "Configuration of parallel 20190322:";; 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 20190310 +parallel configure 20190322 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 20190310, which was +It was created by parallel $as_me 20190322, 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='20190310' + VERSION='20190322' 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 20190310, which was +This file was extended by parallel $as_me 20190322, 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 20190310 +parallel config.status 20190322 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index 24c9acc0..09f51c6d 100644 --- a/configure.ac +++ b/configure.ac @@ -1,4 +1,4 @@ -AC_INIT([parallel], [20190310], [bug-parallel@gnu.org]) +AC_INIT([parallel], [20190322], [bug-parallel@gnu.org]) AM_INIT_AUTOMAKE([-Wall -Werror foreign]) AC_CONFIG_HEADERS([config.h]) AC_CONFIG_FILES([ diff --git a/doc/haikus b/doc/haikus index d15e8141..f30ab242 100644 --- a/doc/haikus +++ b/doc/haikus @@ -1,8 +1,5 @@ Quote of the month: -There are so many things to love about GNU parallel. You could honestly teach a whole parallel computing course with it and never have to leave it for a real language. --- Aubrey Bailey @DNAvinci@twitter - Parallel is a life send, what an awesome piece of software. -- Blaze9@reddit.com @@ -34,6 +31,10 @@ It's the MapReduce of our generation! === Used === +There are so many things to love about GNU parallel. You could honestly teach a whole parallel computing course with it and never have to leave it for a real language. +-- Aubrey Bailey @DNAvinci@twitter + + With GNU Parallel you sure can! I like getting things done diff --git a/doc/promo b/doc/promo index 113ffc00..b35574e6 100644 --- a/doc/promo +++ b/doc/promo @@ -1,3 +1,304 @@ +=head1 GNU Parallel 10 year anniversery - 2020-04-22 + +""" +Author: Ole Tange +Date: Thu Apr 22 01:23:00 2010 +0200 + + Name change: Parallel is now GNU Parallel. + Basic structure for sshlogin and sshloginfile. +""" + +Wow. It has been 10 years since my parallel program was officially +renamed GNU Parallel. It has been quite a ride. + +So it is a probably a good time to take stock. + + +=head2 The design + +The user interface of GNU Parallel has changed very little during the +last 10 years. In total around 10 things have changed in a way that +was not backwards compatible - most of them corner cases that very few +use. + + +=head2 Videos + +In 2010 one of the competitors was PPSS. My colleague, Hans Schou, +saw louwrentius' video showing off PPSS +(https://www.youtube.com/watch?v=32PwsARbePw) and nudged me to make my +own videos and most of the information in those still applies to the +newest version. + + +=head2 Complete rewrite + +Before GNU Parallel was a GNU tool, it started as a wrapper around +`make -j`. But GNU Parallel grew, and was no longer just a small +hack. To make the code easier to maintain it was rewritten to object +orientation. + +This would not have been possible if the test suite had not been so +thorough: It made it much easier to see if + + +=head2 --tollef + +Tollef's parallel from moreutils was a headache: Before Tollef's +parallel was adopted by moreutils I tried getting Parallel adopted in +moreutils. So it was a bit of a disappointment seeing another program +called exactly the same included some months later. + +--tollef was added to make GNU Parallel compatible with Tollef's +parallel, so that if you depended on Tollef's parallel, then you could +drop in GNU Parallel as a replacement. + +I honestly don't think anyone used this. Ever. But it silenced the +argument that GNU Parallel would break existing usage. + +Unfortunately distributions enabled --tollef by default and did not +stress this to the user. So users experienced no end of frustration +when the examples from GNU Parallel's man page did not work. + +moreutils is now generally packaged with Tollef's parallel split off +into a separate package, and the frustration seems to be lower today. + + +=head2 GNU Paralel on NASA Pleiades supercomputer + +In 2013 I stumbled on a happy surprise: NASA seemed to have installed +GNU Parallel on their Pleiades supercomputer. + +https://web.archive.org/web/20130221072030/https://www.nas.nasa.gov/hecc/support/kb/using-gnu-parallel-to-package-multiple-jobs-in-a-single-pbs-job_303.html + +"""On Pleiades, a copy of GNU parallel is available under /usr/bin.""" + +Pleiades was 16th on top500.org in 2013. + +I have the feeling that GNU Parallel is also used on some of the +bigger supercomputers, but I have found no confirmation of that. + + +=head2 GNU Parallel on Termux and OpenWRT + +At the other end of the system size is Termux on Android and OpenWRT +for accesspoints. GNU Parallel runs on both of them, and while I can +see why you might run GNU Parallel on an access point I still do not +know why you would do it on an Android device. + +It is still cool that it can be done at all. + + +=head2 Attack on funding + +A sad chapter is the attack on the funding of GNU Parallel. + +You would think such an attack would come from non-free competitors, but +this attack was from packagers that packaged GNU Parallel for Debian +and SuSE. + +GNU Parallel is funded by me having a job. It is easier to get a well +paid job that will allow for maintaining GNU Parallel if GNU Parallel +is cited, because that proves the tool is useful for serious work. + +I saw GNU Parallel being used in scientific articles, which was great, +but without being cited, which was not ideal. So we discussed on the +email list how to make users aware that citing is how GNU Parallel is +financed and why this is important. + +So it was decided to make a notice similar to a do-show-this-again box +known from e.g. Firefox. The notice could be silenced in less than 10 +seconds. + +Unfortunately in a misguided act of short term gain in popularity SuSE +and Debian did a disservice to free software and disabled this notice +in the version they currently distribute. + +As GNU Parallel is free software they are allowed to fork the +software, but only if they make sure the forked version cannot be +mistaken for GNU Parallel. We have court cases showing this is the +case, but still Debian and SuSE refuse to back down, so the problem +still not resolved. + +If you would like to see GNU Parallel maintained in the future, please +help by raising this issue with SuSE and Debian. Their current stance +hurts free software by making it harder to justify spending time on +maintaining GNU Parallel. Not having GNU Parallel distributed by +Debian and SuSE is actually preferable to the current situation, +though, the best outcome would be if they distributed the non-modified +version. + +For users who are unwiling to spend the 10 seconds on silencing the +notice there is an easy solution: "Don't like it? Don't use it." A +considerable amount of time has been spent on mapping the +alternatives, so there is really no excuse. See `man +parallel_alternatives`. + + +=head2 The GNU Parallel 2018 book + +Hans Schou teased me by calling the man page "the book". In 2018 I +took the consequence of that and wrote a book. The book is available +online (https://doi.org/10.5281/zenodo.1146014) and in print +(http://www.lulu.com/shop/ole-tange/gnu-parallel-2018/paperback/product-23558902.html). + + +=head2 Cheatsheet + +A lot of hours has been put into documentation, but the problem with +having a lot of documentation is that is can make some people think +the program is hard to use giving rise to the myth that "You have to +read a full book to be able to use GNU Parallel". + +Several people noted that GNU Parallel was missing a cheat sheet. So +in 2019 a one page cheat sheet was included in the package. + +=head2 Why all the options? + +Instead of crappy wrapper scripts. + +=head2 Convenience options --nice --basefile --transfer --return +--cleanup --tmux --group --compress --cat --fifo --workdir --tag + + +=head2 The May 1st incident + +I was at a May 1st event for computer professionals where I sat at a +long table opposite a guy. At some point the discussion turned to +parallelism. + +"I have found the brilliant program," he said. "It does everything if +you want to parallelize." + +The more he explained the more certain was I that I knew this program +quite intimately. + +"And it is written by a Dane," he said excited. + +"Oh. Are you aware that the author is sitting on my side of the table?" + +We were the only ones sitting at the table, but we had had a few +beers, so it took a while before it dawned to him, who I was. + + + +=head2 Underappreciated functionality + +=head3 env_parallel + +When I was shown you could encode variables into a single variable and +move that to a remote system I was intrigued. But why stop at +variables? Why not include aliases, functions, and arrays? + +env_parallel started out as a technical challenge: How much can be +copied transparently? + +But it quickly got a more practical side: Why should you not be able +to use the variables, aliases and functions defined on the local +system just because you want to run jobs on a remote system? + + +=head3 parset + +Some of GNU Parallel functionality is inspired by other people +problems: How could this problem be solved in general? + +parset is one of those. It was inpired by a user who needed the output +from different jobs to be stored in different variables. The jobs were +slow and could be run in parallel. So while the running of the jobs +were clearly a task for GNU Parallel, the storing in variables was not +so clear. + +It was fairly easy to code something that would work if the output was +a single line with no spaces, but GNU Parallel tries hard not to set +artifical limits: It is much preferable to a bit slower if the outcome +is predictable - whether the output is a single word or some binary +data. + + +=head3 --embed + +Some of the functionality is inspired by other tools. --embed is one +of those. + +--embed was inspired by Lesser Parallel that in turn was inspired by +GNU Parallel. The major feature of Lesser Parallel is to be embedded +in any bash script. The developer will embed the code into his own +bash script and distribute this script. + +So with --embed the users of the script will not have to install GNU +Parallel to run it. + + +=head3 --pipepart with --fifo + +=head3 --bar + +I see people using --bar too rarely. It is one of the easiest ways to +get a visual representation of when all the jobs are expected done. + + +=head3 Combining ::: with :::+ + + +=head3 --rpl with dynamic replacement strings + +=head3 --results with replacement strings + +=head3 --tagstring with replacement strings + + +=head2 Feedback + +Best ever + + +=head2 Live strong + +On average there has been a new release of GNU Parallel every month +since 2010-04-24. + +In the autumn of 2010 Henrik Sandklef teased me that he knew when the +next release would be. GNU Parallel just happened to have been +released twice in the 22nd, so he assumed the next release would also +be on the 22nd. And why not? A few releases were not in line with +this, but since 2011 there has been a release every month around the +22nd. + +The fixed release cycle means there has been more than 100 releases +making GNU Parallel in the top 5 of GNU tools with the most releases. + + +=head3 Naming releases + +At the presenatation at FOSDEM (20110205) I found it might be fun to +give each release code name, so this release was named FOSDEM. After +the Japan release a naming convention started to emerge. And since +then each release has had a name related to an event in the past +month. + +I will be honest: Some releases were easier to name than others. + +Since the events are not always happy events, the names have now and +then stirred a bit of controversy. But if you want happier names, go +make a happier world :) + +=head3 Competitors + +Apart from xargs no competitor has had the strength to live for 10 +years. And even xargs has not had a steady release cycle with a new +release every month. + + +=head2 The next 10 years + +Parallization has come to stay, and there are a lot of competitors to +GNU Parallel that do specialized tasks better. But I have a feeling +that there is room for a generalized tool like GNU Parallel also in 10 +years. + + + =head1 top photos http://www.flickr.com/photos/dexxus/5499821986/in/photostream/ diff --git a/doc/release_new_version b/doc/release_new_version index d4f6f54d..d278ce74 100644 --- a/doc/release_new_version +++ b/doc/release_new_version @@ -207,25 +207,27 @@ from:tange@gnu.org to:parallel@gnu.org, bug-parallel@gnu.org stable-bcc: Jesse Alama -Subject: GNU Parallel 20190322 (climatestrike FridayforFuture -Christchurch 'Max 8' fly i etiopien 737Max 8 indien pakistan Kashmir') released <<[stable]>> +Subject: GNU Parallel 20190322 ('FridayforFuture') released <<[stable]>> -GNU Parallel 20190322 ('') <<[stable]>> has been released. It is available for download at: http://ftpmirror.gnu.org/parallel/ +GNU Parallel 20190322 ('FridayforFuture') <<[stable]>> has been released. It is available for download at: http://ftpmirror.gnu.org/parallel/ -<> +The change in signalling makes this release experimental for users that send SIGTERM to GNU Parallel. Quote of the month: - <<>> + There are so many things to love about GNU parallel. You could honestly teach a whole parallel computing course with it and never have to leave it for a real language. + -- Aubrey Bailey @DNAvinci@twitter New in this release: * GNU Parallel now includes a cheat sheet: parallel_cheat.pdf -https://calendar.colorado.edu/event/high_throughput_computing_on_rmacc_summit_and_beyond#.XH2NBhB7mV4 +* High Throughput Computing on RMACC Summit and Beyond https://calendar.colorado.edu/event/high_throughput_computing_on_rmacc_summit_and_beyond#.XH2NBhB7mV4 -https://www.cheatography.com/cpriest/cheat-sheets/gnu-parallel/ +* GNU Parallel Cheat Sheet by cpriest https://www.cheatography.com/cpriest/cheat-sheets/gnu-parallel/ + +* Use Multiple CPU Cores(Parallelize) with Single Threaded Linux Commands http://xensoft.com/use-multiple-cpu-cores-parallelize-with-single-threaded-linux-commands/ * Bug fixes and man page updates. diff --git a/packager/obs/home:tange/parallel/.osc/_files b/packager/obs/home:tange/parallel/.osc/_files index e055342a..277da423 100644 --- a/packager/obs/home:tange/parallel/.osc/_files +++ b/packager/obs/home:tange/parallel/.osc/_files @@ -1,6 +1,6 @@ - - - - - + + + + + diff --git a/packager/obs/home:tange/parallel/.osc/parallel.spec b/packager/obs/home:tange/parallel/.osc/parallel.spec index dbb1efe7..d0ed7801 100644 --- a/packager/obs/home:tange/parallel/.osc/parallel.spec +++ b/packager/obs/home:tange/parallel/.osc/parallel.spec @@ -1,7 +1,7 @@ Summary: Shell tool for executing jobs in parallel Name: parallel -Version: 20190222 +Version: 20190322 Release: 1.2 License: GPL Group: Productivity/File utilities @@ -88,6 +88,7 @@ rm $RPM_BUILD_ROOT%{_docdir}/sem.pdf rm $RPM_BUILD_ROOT%{_docdir}/sql.pdf rm $RPM_BUILD_ROOT%{_docdir}/parcat.pdf rm $RPM_BUILD_ROOT%{_docdir}/parset.pdf +rm $RPM_BUILD_ROOT%{_docdir}/parallel_cheat.pdf %clean rm -rf $RPM_BUILD_ROOT @@ -97,7 +98,7 @@ rm -rf $RPM_BUILD_ROOT /usr/bin/* /usr/share/man/man1/* /usr/share/man/man7/* -%doc README NEWS src/parallel.html src/env_parallel.html src/parallel_tutorial.html src/parallel_design.html src/parallel_alternatives.html src/parallel_book.html src/sem.html src/sql.html src/parcat.html src/parset.html src/niceload.html src/parallel.texi src/env_parallel.texi src/parallel_tutorial.texi src/parallel_design.texi src/parallel_alternatives.texi src/parallel_book.texi src/niceload.texi src/sem.texi src/sql.texi src/parcat.texi src/parset.texi src/parallel.pdf src/env_parallel.pdf src/parallel_tutorial.pdf src/parallel_design.pdf src/parallel_alternatives.pdf src/parallel_book.pdf src/niceload.pdf src/sem.pdf src/sql.pdf src/parcat.pdf src/parset.pdf +%doc README NEWS src/parallel.html src/env_parallel.html src/parallel_tutorial.html src/parallel_design.html src/parallel_alternatives.html src/parallel_book.html src/sem.html src/sql.html src/parcat.html src/parset.html src/niceload.html src/parallel.texi src/env_parallel.texi src/parallel_tutorial.texi src/parallel_design.texi src/parallel_alternatives.texi src/parallel_book.texi src/niceload.texi src/sem.texi src/sql.texi src/parcat.texi src/parset.texi src/parallel.pdf src/env_parallel.pdf src/parallel_tutorial.pdf src/parallel_design.pdf src/parallel_alternatives.pdf src/parallel_book.pdf src/niceload.pdf src/sem.pdf src/sql.pdf src/parcat.pdf src/parset.pdf src/parallel_cheat.pdf %changelog * Sat Jan 22 2011 Ole Tange diff --git a/packager/obs/home:tange/parallel/parallel.spec b/packager/obs/home:tange/parallel/parallel.spec index dbb1efe7..d0ed7801 100644 --- a/packager/obs/home:tange/parallel/parallel.spec +++ b/packager/obs/home:tange/parallel/parallel.spec @@ -1,7 +1,7 @@ Summary: Shell tool for executing jobs in parallel Name: parallel -Version: 20190222 +Version: 20190322 Release: 1.2 License: GPL Group: Productivity/File utilities @@ -88,6 +88,7 @@ rm $RPM_BUILD_ROOT%{_docdir}/sem.pdf rm $RPM_BUILD_ROOT%{_docdir}/sql.pdf rm $RPM_BUILD_ROOT%{_docdir}/parcat.pdf rm $RPM_BUILD_ROOT%{_docdir}/parset.pdf +rm $RPM_BUILD_ROOT%{_docdir}/parallel_cheat.pdf %clean rm -rf $RPM_BUILD_ROOT @@ -97,7 +98,7 @@ rm -rf $RPM_BUILD_ROOT /usr/bin/* /usr/share/man/man1/* /usr/share/man/man7/* -%doc README NEWS src/parallel.html src/env_parallel.html src/parallel_tutorial.html src/parallel_design.html src/parallel_alternatives.html src/parallel_book.html src/sem.html src/sql.html src/parcat.html src/parset.html src/niceload.html src/parallel.texi src/env_parallel.texi src/parallel_tutorial.texi src/parallel_design.texi src/parallel_alternatives.texi src/parallel_book.texi src/niceload.texi src/sem.texi src/sql.texi src/parcat.texi src/parset.texi src/parallel.pdf src/env_parallel.pdf src/parallel_tutorial.pdf src/parallel_design.pdf src/parallel_alternatives.pdf src/parallel_book.pdf src/niceload.pdf src/sem.pdf src/sql.pdf src/parcat.pdf src/parset.pdf +%doc README NEWS src/parallel.html src/env_parallel.html src/parallel_tutorial.html src/parallel_design.html src/parallel_alternatives.html src/parallel_book.html src/sem.html src/sql.html src/parcat.html src/parset.html src/niceload.html src/parallel.texi src/env_parallel.texi src/parallel_tutorial.texi src/parallel_design.texi src/parallel_alternatives.texi src/parallel_book.texi src/niceload.texi src/sem.texi src/sql.texi src/parcat.texi src/parset.texi src/parallel.pdf src/env_parallel.pdf src/parallel_tutorial.pdf src/parallel_design.pdf src/parallel_alternatives.pdf src/parallel_book.pdf src/niceload.pdf src/sem.pdf src/sql.pdf src/parcat.pdf src/parset.pdf src/parallel_cheat.pdf %changelog * Sat Jan 22 2011 Ole Tange diff --git a/src/niceload b/src/niceload index 8e6b15fc..66e1be98 100755 --- a/src/niceload +++ b/src/niceload @@ -23,7 +23,7 @@ use strict; use Getopt::Long; $Global::progname="niceload"; -$Global::version = 20190223; +$Global::version = 20190322; Getopt::Long::Configure("bundling","require_order"); get_options_from_array(\@ARGV) || die_usage(); if($opt::version) { diff --git a/src/parallel b/src/parallel index e347024b..27a07c19 100755 --- a/src/parallel +++ b/src/parallel @@ -1695,7 +1695,7 @@ sub check_invalid_option_combinations() { sub init_globals() { # Defaults: - $Global::version = 20190223; + $Global::version = 20190322; $Global::progname = 'parallel'; $Global::infinity = 2**31; $Global::debug = 0; diff --git a/src/parallel.pod b/src/parallel.pod index b2bcdad7..3453fab7 100644 --- a/src/parallel.pod +++ b/src/parallel.pod @@ -2076,7 +2076,7 @@ Only supported in B. See also B<--env>, B<--record-env>. -=item B<--shard> I (alpha testing) +=item B<--shard> I (beta testing) Use column I as shard key and shard input to the jobs. @@ -2152,7 +2152,7 @@ E.g. B<--shebang-wrap> must be set as the first option. -=item B<--shellquote> (beta testing) +=item B<--shellquote> Does not run the command but quotes it. Useful for making quoted composed commands for GNU B. @@ -4513,9 +4513,9 @@ GNU B will then print the currently running jobs on stderr If you regret starting a lot of jobs you can simply break GNU B, but if you want to make sure you do not have half-completed jobs you -should send the signal B to GNU B: +should send the signal B to GNU B: - killall -TERM parallel + killall -HUP parallel This will tell GNU B to not start any new jobs, but wait until the currently running jobs are finished before exiting. @@ -4540,7 +4540,7 @@ shell. B If each of the jobs tests a solution and one of jobs finds the solution the job can tell GNU B not to start more jobs -by: B. This only works on the local +by: B. This only works on the local computer. diff --git a/src/parallel_design.pod b/src/parallel_design.pod index a7211060..fce40839 100644 --- a/src/parallel_design.pod +++ b/src/parallel_design.pod @@ -495,7 +495,8 @@ B<--pipepart>/B<--pipe> should be done on the local machine inside B<--tmux> =head2 Convenience options --nice --basefile --transfer --return ---cleanup --tmux --group --compress --cat --fifo --workdir +--cleanup --tmux --group --compress --cat --fifo --workdir --tag +--tagstring These are all convenience options that make it easier to do a task. But more importantly: They are tested to work on corner cases, diff --git a/src/sql b/src/sql index 1dc617a3..77afebfd 100755 --- a/src/sql +++ b/src/sql @@ -574,7 +574,7 @@ $Global::Initfile && unlink $Global::Initfile; exit ($err); sub parse_options { - $Global::version = 20190223; + $Global::version = 20190322; $Global::progname = 'sql'; # This must be done first as this may exec myself diff --git a/testsuite/wanted-results/parallel-local-30s b/testsuite/wanted-results/parallel-local-30s index ac2bb97f..ef3599cc 100644 --- a/testsuite/wanted-results/parallel-local-30s +++ b/testsuite/wanted-results/parallel-local-30s @@ -204,24 +204,24 @@ par_shellquote csh \\\\\\\\ "\ par_shellquote csh "\ \ \ \\\\\\\\\\\\\\ \!\"\#\$%\&\'\(\)\*+,-./0123456789:\;\<\=\>\?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]\^_\`abcdefghijklmnopqrstuvwxyz\{\|\}\~\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ par_shellquote tcsh \\\\\\\\ "\ par_shellquote tcsh "\ \ \ \\\\\\\\\\\\\\ \!\"\#\$%\&\'\(\)\*+,-./0123456789:\;\<\=\>\?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]\^_\`abcdefghijklmnopqrstuvwxyz\{\|\}\~\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ -par_sigterm ### Test SIGTERM -par_sigterm 1 -par_sigterm 10 -par_sigterm 2 -par_sigterm 3 -par_sigterm 4 -par_sigterm 5 -par_sigterm 6 -par_sigterm 7 -par_sigterm 8 -par_sigterm 9 -par_sigterm parallel: SIGTERM received. No new jobs will be started. -par_sigterm parallel: Waiting for these 5 jobs to finish. Send SIGTERM again to stop now. -par_sigterm parallel: sleep 15; echo 10 -par_sigterm parallel: sleep 15; echo 6 -par_sigterm parallel: sleep 15; echo 7 -par_sigterm parallel: sleep 15; echo 8 -par_sigterm parallel: sleep 15; echo 9 +par_sighup ### Test SIGHUP +par_sighup 1 +par_sighup 10 +par_sighup 2 +par_sighup 3 +par_sighup 4 +par_sighup 5 +par_sighup 6 +par_sighup 7 +par_sighup 8 +par_sighup 9 +par_sighup parallel: SIGHUP received. No new jobs will be started. +par_sighup parallel: Waiting for these 5 jobs to finish. Send SIGTERM to stop now. +par_sighup parallel: sleep 15; echo 10 +par_sighup parallel: sleep 15; echo 6 +par_sighup parallel: sleep 15; echo 7 +par_sighup parallel: sleep 15; echo 8 +par_sighup parallel: sleep 15; echo 9 par_test_detected_shell ### bug #42913: Dont use $SHELL but the shell currently running par_test_detected_shell test_unknown_shell ash Global::shell /bin/bash par_test_detected_shell test_unknown_shell bash Global::shell /bin/bash diff --git a/testsuite/wanted-results/parallel-local-3s b/testsuite/wanted-results/parallel-local-3s index 44e4ad01..97cd6b36 100644 --- a/testsuite/wanted-results/parallel-local-3s +++ b/testsuite/wanted-results/parallel-local-3s @@ -49,19 +49,22 @@ par_exitval_signal exitval=128+6 OK par_exitval_signal signal OK par_keeporder_roundrobin bug #50081: --keep-order --round-robin should give predictable results par_keeporder_roundrobin OK +par_kill_hup ### Are children killed if GNU Parallel receives HUP? There should be no sleep at the end +par_kill_hup bash-+-perl---2*[bash---sleep] +par_kill_hup `-pstree +par_kill_hup parallel: SIGHUP received. No new jobs will be started. +par_kill_hup parallel: Waiting for these 2 jobs to finish. Send SIGTERM to stop now. +par_kill_hup parallel: bash -c 'sleep 1 & pid=$!; wait $pid' +par_kill_hup parallel: bash -c 'sleep 1 & pid=$!; wait $pid' +par_kill_hup bash---pstree par_kill_int_twice ### Are children killed if GNU Parallel receives INT twice? There should be no sleep at the end par_kill_int_twice bash-+-perl---bash---sleep par_kill_int_twice `-pstree par_kill_int_twice bash---pstree -par_kill_term_twice ### Are children killed if GNU Parallel receives TERM twice? There should be no sleep at the end -par_kill_term_twice bash-+-perl---bash---sleep -par_kill_term_twice `-pstree -par_kill_term_twice parallel: SIGTERM received. No new jobs will be started. -par_kill_term_twice parallel: Waiting for these 1 jobs to finish. Send SIGTERM again to stop now. -par_kill_term_twice parallel: bash -c 'sleep 120 & pid=$!; wait $pid' 1 -par_kill_term_twice bash-+-perl---bash---sleep -par_kill_term_twice `-pstree -par_kill_term_twice bash---pstree +par_kill_term ### Are children killed if GNU Parallel receives TERM? There should be no sleep at the end +par_kill_term bash-+-perl---bash---sleep +par_kill_term `-pstree +par_kill_term bash---pstree par_lb_mem_usage 1 par_lb_mem_usage 1 par_lb_mem_usage 2 @@ -80,10 +83,6 @@ par_nice Check that --nice works par_nice load_10 par_nice bzip2 18 par_nice bzip2 18 -par_nice parallel: SIGTERM received. No new jobs will be started. -par_nice parallel: Waiting for these 2 jobs to finish. Send SIGTERM again to stop now. -par_nice parallel: bzip2 < /dev/zero -par_nice parallel: bzip2 < /dev/zero par_pipe_unneeded_procs ### Test bug #34241: --pipe should not spawn unneeded processes par_pipe_unneeded_procs 1 par_pipe_unneeded_procs 2