Merge branch 'master' of git.sv.gnu.org:/srv/git/parallel

This commit is contained in:
Ole Tange 2013-07-24 15:26:41 +02:00
commit 92773c7899
21 changed files with 426 additions and 508 deletions

View file

@ -14,7 +14,12 @@
# If that fails, it does a personal installation. # If that fails, it does a personal installation.
# If that fails, it copies to $HOME/bin # If that fails, it copies to $HOME/bin
LATEST=$(wget -qO- http://ftpmirror.gnu.org/parallel | perl -ne '/(parallel-\d{8})/ and print $1."\n"' | sort | tail -n1) # tail on openindiana must be /usr/xpg4/bin/tail
TAIL=$(echo | tail -n 1 2>/dev/null && echo tail || (echo | /usr/xpg4/bin/tail -n 1 && echo /usr/xpg4/bin/tail))
# grep on openindiana must be /usr/xpg4/bin/grep
GREP=$(echo | grep -vE . 2>/dev/null && echo grep || (echo | /usr/xpg4/bin/grep -vE . && echo /usr/xpg4/bin/grep))
LATEST=$(wget -qO- http://ftpmirror.gnu.org/parallel | perl -ne '/(parallel-\d{8})/ and print $1."\n"' | sort | $TAIL -n1)
if test \! -d $LATEST/src/; then if test \! -d $LATEST/src/; then
# Source dir does not exist # Source dir does not exist
rm -f $LATEST.tar.bz2 $LATEST.tar.bz2.sig rm -f $LATEST.tar.bz2 $LATEST.tar.bz2.sig
@ -27,8 +32,10 @@ if gpg -h 2>/dev/null >/dev/null; then
# GnuPG installed # GnuPG installed
# Setup .gnupg/gpg.conf if not already done # Setup .gnupg/gpg.conf if not already done
echo | gpg 2>/dev/null >/dev/null echo | gpg 2>/dev/null >/dev/null
if gpg --with-fingerprint --auto-key-locate keyserver --keyserver-options auto-key-retrieve $LATEST.tar.bz2.sig 2>&1 | grep -E '^Primary key fingerprint: BE9C B493 81DE 3166 A3BC 66C1 2C62 29E2 FFFF FFF1' ; then gpg --keyserver keys.gnupg.net --recv-key FFFFFFF1
# Source code signed by Ole Tange <ole@tange.dk> KeyID FFFFFFF1 gpg --keyserver keys.gnupg.net --recv-key 88888888
if gpg --with-fingerprint $LATEST.tar.bz2.sig 2>&1 | $GREP -E '^Primary key fingerprint: BE9C B493 81DE 3166 A3BC 66C1 2C62 29E2 FFFF FFF1|^Primary key fingerprint: CDA0 1A42 08C4 F745 0610 7E7B D1AB 4516 8888 8888' ; then
# Source code signed by Ole Tange <ole@tange.dk> KeyID FFFFFFF1/88888888
true true
else else
# GnuPG signature failed # GnuPG signature failed
@ -46,12 +53,12 @@ else
echo echo
echo "Continue anyway? (y/n)" echo "Continue anyway? (y/n)"
read YN read YN
if test $YN = "y" -o $YN = "Y"; then if test "$YN" = "n"; then
# Continue
true
else
# Stop # Stop
exit 2 exit 2
else
# Continue
true
fi fi
fi fi

32
NEWS
View file

@ -1,3 +1,35 @@
20130722
* --round-robin with --pipe will write all blocks to already running
jobs.
* --env can now transfer Bash function for remote execution. That is
pretty cool!
* GNU Parallel was used (unfortunately with improper citation) in:
Understanding the Impact of E-Commerce Software on the Adoption of Structured Data on the Web
http://link.springer.com/chapter/10.1007/978-3-642-38366-3_9#page-1
* GNU Parallel was used (unfortunately with improper citation) in:
CWI at TREC 2012, KBA track and Session Track
http://trec.nist.gov/pubs/trec21/papers/CWI.kba.session.final.pdf
* Mitigation of Adverse Effects Caused by Shock Wave Boundary Layer
Interactions through Optimal Wall Shaping.
http://arc.aiaa.org/doi/abs/10.2514/6.2013-2653
* Using GNU parallel to convert images.
http://www.brunokim.com.br/blog/?p=18
* A quick way to parallelize.
http://timotheepoisot.fr/2013/07/08/parallel/
* GNU Parallel 20130522 ('Rana Plaza') 发布,并行作业执行.
http://www.open-open.com/news/view/371301
* Quite a few bug fixes and man page updates.
20130622 20130622
* --xapply now recycles arguments if an input source has more * --xapply now recycles arguments if an input source has more

12
README
View file

@ -40,9 +40,9 @@ document.
Full installation of GNU Parallel is as simple as: Full installation of GNU Parallel is as simple as:
wget http://ftpmirror.gnu.org/parallel/parallel-20130630.tar.bz2 wget http://ftpmirror.gnu.org/parallel/parallel-20130722.tar.bz2
bzip2 -dc parallel-20130630.tar.bz2 | tar xvf - bzip2 -dc parallel-20130722.tar.bz2 | tar xvf -
cd parallel-20130630 cd parallel-20130722
./configure && make && make install ./configure && make && 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 If you are not root you can add ~/bin to your path and install in
~/bin and ~/share: ~/bin and ~/share:
wget http://ftpmirror.gnu.org/parallel/parallel-20130630.tar.bz2 wget http://ftpmirror.gnu.org/parallel/parallel-20130722.tar.bz2
bzip2 -dc parallel-20130630.tar.bz2 | tar xvf - bzip2 -dc parallel-20130722.tar.bz2 | tar xvf -
cd parallel-20130630 cd parallel-20130722
./configure --prefix=$HOME && make && make install ./configure --prefix=$HOME && make && make install
Or if your system lacks 'make' you can simply copy src/parallel Or if your system lacks 'make' you can simply copy src/parallel

20
configure vendored
View file

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

View file

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

View file

@ -94,6 +94,8 @@ gpg --clearsign --yes parallel-latest.tar.bz2.directive
gpg --auto-key-locate keyserver --keyserver-options auto-key-retrieve parallel-latest.tar.bz2.sig gpg --auto-key-locate keyserver --keyserver-options auto-key-retrieve parallel-latest.tar.bz2.sig
gpg --auto-key-locate keyserver --keyserver-options auto-key-retrieve parallel-$YYYYMMDD.tar.bz2.sig gpg --auto-key-locate keyserver --keyserver-options auto-key-retrieve parallel-$YYYYMMDD.tar.bz2.sig
#../ftpsync/src/ftpsync parallel-$YYYYMMDD.tar.bz2{,.sig,*asc} ftp://ftp-upload.gnu.org/incoming/alpha/
echo put parallel-$YYYYMMDD.tar.bz2{,.sig,*asc} | ncftp ftp://ftp-upload.gnu.org/incoming/ftp/ echo put parallel-$YYYYMMDD.tar.bz2{,.sig,*asc} | ncftp ftp://ftp-upload.gnu.org/incoming/ftp/
echo put parallel-latest.tar.bz2{,.sig,*asc} | ncftp ftp://ftp-upload.gnu.org/incoming/ftp/ echo put parallel-latest.tar.bz2{,.sig,*asc} | ncftp ftp://ftp-upload.gnu.org/incoming/ftp/
#echo put parallel-$YYYYMMDD.tar.bz2{,.sig,*asc} | ncftp ftp://ftp-upload.gnu.org/incoming/alpha/ #echo put parallel-$YYYYMMDD.tar.bz2{,.sig,*asc} | ncftp ftp://ftp-upload.gnu.org/incoming/alpha/
@ -125,6 +127,7 @@ cd parallel-$YYYYMMDD
./configure ./configure
make -j && sudo make -j install make -j && sudo make -j install
pushd pushd
sudo cp /usr/local/bin/parallel /usr/local/bin/parallel-$YYYYMMDD
== Update website == == Update website ==
@ -200,10 +203,18 @@ Subject: GNU Parallel 20130722 ('Engelbart') released
GNU Parallel 20130722 ('Engelbart') has been released. It is GNU Parallel 20130722 ('Engelbart') has been released. It is
available for download at: http://ftp.gnu.org/gnu/parallel/ available for download at: http://ftp.gnu.org/gnu/parallel/
Very few changes so this can be considered a stable release.
New in this release: New in this release:
* --round-robin with --pipe will write all blocks to already running
jobs.
* --env can now transfer Bash function for remote execution. That is
pretty cool!
* New signing key. Due to recommendations from NIST
http://www.keylength.com/en/4/ the signing key was changed from
1024D/4000g/ID:FFFFFFF1 to 9888R/ID:88888888.
* GNU Parallel was used (unfortunately with improper citation) in: * GNU Parallel was used (unfortunately with improper citation) in:
Understanding the Impact of E-Commerce Software on the Adoption of Structured Data on the Web Understanding the Impact of E-Commerce Software on the Adoption of Structured Data on the Web
http://link.springer.com/chapter/10.1007/978-3-642-38366-3_9#page-1 http://link.springer.com/chapter/10.1007/978-3-642-38366-3_9#page-1
@ -212,14 +223,20 @@ New in this release:
CWI at TREC 2012, KBA track and Session Track CWI at TREC 2012, KBA track and Session Track
http://trec.nist.gov/pubs/trec21/papers/CWI.kba.session.final.pdf http://trec.nist.gov/pubs/trec21/papers/CWI.kba.session.final.pdf
* Mitigation of Adverse Effects Caused by Shock Wave Boundary Layer Interactions through Optimal Wall Shaping * Mitigation of Adverse Effects Caused by Shock Wave Boundary Layer
Interactions through Optimal Wall Shaping.
http://arc.aiaa.org/doi/abs/10.2514/6.2013-2653 http://arc.aiaa.org/doi/abs/10.2514/6.2013-2653
* http://www.brunokim.com.br/blog/?p=18 * Using GNU parallel to convert images.
http://www.brunokim.com.br/blog/?p=18
* http://www.open-open.com/news/view/371301 * A quick way to parallelize.
http://timotheepoisot.fr/2013/07/08/parallel/
* Bug fixes and man page updates. * GNU Parallel 20130522 ('Rana Plaza') 发布,并行作业执行.
http://www.open-open.com/news/view/371301
* Quite a few bug fixes and man page updates.
= About GNU Parallel = = About GNU Parallel =

View file

@ -155,11 +155,15 @@ xargs or cat | sh.</description>
<implementation id="sha1new=481d687481efe0e0f8dbb0af0c0dbe40cc40d522" released="2013-06-23" version="20130622"> <implementation id="sha1new=481d687481efe0e0f8dbb0af0c0dbe40cc40d522" released="2013-06-23" version="20130622">
<manifest-digest sha256new="SLPAY56ENZUBJYZMGTO4YVMNSJMSOEEUQLAFTTJT3QTDO2FZFXSQ"/> <manifest-digest sha256new="SLPAY56ENZUBJYZMGTO4YVMNSJMSOEEUQLAFTTJT3QTDO2FZFXSQ"/>
<archive extract="parallel-20130622" href="http://ftpmirror.gnu.org/parallel/parallel-20130622.tar.bz2" size="243064"/> <archive extract="parallel-20130622" href="http://ftpmirror.gnu.org/parallel/parallel-20130622.tar.bz2" size="243064"/>
</implementation>
<implementation id="sha1new=f8bb74a654d9db954642779d05d085f49a884237" released="2013-07-23" version="20130722">
<manifest-digest sha256new="55EVKHCPVW6O5F5RYWCYRH7P6MJ2FYQ3TYXAD2CM4ASVB5JQ6SLA"/>
<archive extract="parallel-20130722" href="http://ftpmirror.gnu.org/parallel/parallel-20130722.tar.bz2" size="245705"/>
</implementation> </implementation>
</group> </group>
</interface> </interface>
<!-- Base64 Signature <!-- Base64 Signature
iEYEABECAAYFAlHGaUcACgkQ/lhgK1iJTtLZXgCgn8r6w9A1+qsc9WIIwe5tlztGkoIAoItQAri+ iEYEABECAAYFAlHuJGcACgkQ/lhgK1iJTtImYACghf1EdeotOCcE84zqBf8VWCZFLmEAn3lMXUMU
VEgZG7fWKYJAPRcsjIjJ KKcEhYVWTdtgUeL5jAyH
--> -->

View file

@ -1,6 +1,6 @@
Summary: Shell tool for executing jobs in parallel Summary: Shell tool for executing jobs in parallel
Name: parallel Name: parallel
Version: 20130622 Version: 20130722
Release: 1 Release: 1
License: GPL License: GPL
Group: Productivity/File utilities Group: Productivity/File utilities

View file

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

View file

@ -33,7 +33,6 @@ use Getopt::Long;
# Used to ensure code quality # Used to ensure code quality
use strict; use strict;
$SIG{TERM} ||= sub { exit 0; }; # $SIG{TERM} is not set on Mac OS X
if(not $ENV{SHELL}) { if(not $ENV{SHELL}) {
# $ENV{SHELL} is sometimes not set on Mac OS X and Windows # $ENV{SHELL} is sometimes not set on Mac OS X and Windows
::warning("\$SHELL not set. Using /bin/sh.\n"); ::warning("\$SHELL not set. Using /bin/sh.\n");
@ -45,9 +44,10 @@ if(not $ENV{HOME}) {
$ENV{HOME} = "/tmp"; $ENV{HOME} = "/tmp";
} }
save_sig_stdin_stdout_stderr(); save_stdin_stdout_stderr();
save_original_signal_handler();
parse_options(); parse_options();
::debug("Open file descriptors: ".join(" ",keys %Global::fd)."\n");
my $number_of_args; my $number_of_args;
if($Global::max_number_of_args) { if($Global::max_number_of_args) {
$number_of_args=$Global::max_number_of_args; $number_of_args=$Global::max_number_of_args;
@ -527,12 +527,12 @@ sub write_record_to_pipe {
} }
$job->write($header_ref); $job->write($header_ref);
$job->write($record_ref); $job->write($record_ref);
my $fh = $job->stdin(); my $stdin_fh = $job->fd(0);
close $fh; close $stdin_fh;
exit(0); exit(0);
} }
my $fh = $job->stdin(); my $stdin_fh = $job->fd(0);
close $fh; close $stdin_fh;
return 1; return 1;
} }
@ -726,7 +726,7 @@ sub get_options_from_array {
sub parse_options { sub parse_options {
# Returns: N/A # Returns: N/A
# Defaults: # Defaults:
$Global::version = 20130630; $Global::version = 20130722;
$Global::progname = 'parallel'; $Global::progname = 'parallel';
$Global::infinity = 2**31; $Global::infinity = 2**31;
$Global::debug = 0; $Global::debug = 0;
@ -1057,7 +1057,7 @@ sub open_joblog {
} else { } else {
if($opt::joblog eq "-") { if($opt::joblog eq "-") {
# Use STDOUT as joblog # Use STDOUT as joblog
$Global::joblog = $Global::original_stdout $Global::joblog = $Global::fd{1};
} elsif(not open($Global::joblog, ">", $opt::joblog)) { } elsif(not open($Global::joblog, ">", $opt::joblog)) {
# Overwrite the joblog # Overwrite the joblog
::error("Cannot write to --joblog $opt::joblog.\n"); ::error("Cannot write to --joblog $opt::joblog.\n");
@ -1304,6 +1304,26 @@ sub shell_unquote {
sub __FILEHANDLES__ {} sub __FILEHANDLES__ {}
sub save_stdin_stdout_stderr {
# Remember the original STDIN, STDOUT and STDERR
# and file descriptors opened by the shell (e.g. 3>/tmp/foo)
# Returns: N/A
# Find file descriptors that are already opened (by the shell)
for my $fdno (1..61) {
# /dev/fd/62 and above are used by bash for <(cmd)
my $fh;
if(open($fh,">&=",$fdno)) {
$Global::fd{$fdno}=$fh;
}
}
open $Global::original_stderr, ">&", "STDERR" or
::die_bug("Can't dup STDERR: $!");
open $Global::original_stdin, "<&", "STDIN" or
::die_bug("Can't dup STDIN: $!");
}
sub enough_file_handles { sub enough_file_handles {
# check that we have enough filehandles available for starting # check that we have enough filehandles available for starting
# another job # another job
@ -1314,16 +1334,18 @@ sub enough_file_handles {
if($Global::grouped) { if($Global::grouped) {
my %fh; my %fh;
my $enough_filehandles = 1; my $enough_filehandles = 1;
# We need a filehandle for STDOUT and STDERR # perl uses 7 filehandles for something?
# perl uses 7 filehandles for something?
# open3 uses 2 extra filehandles temporarily # open3 uses 2 extra filehandles temporarily
for my $i (1..8) { # We need a filehandle for each redirected file descriptor
# (normally just STDOUT and STDERR)
for my $i (1..(7+2+keys %Global::fd)) {
$enough_filehandles &&= open($fh{$i}, "<", "/dev/null"); $enough_filehandles &&= open($fh{$i}, "<", "/dev/null");
} }
for (values %fh) { close $_; } for (values %fh) { close $_; }
return $enough_filehandles; return $enough_filehandles;
} else { } else {
return 1; # Ungrouped does not need extra file handles
return 1;
} }
} }
@ -1358,19 +1380,6 @@ sub __RUNNING_THE_JOBS_AND_PRINTING_PROGRESS__ {}
# $Global::total_running = total number of running jobs # $Global::total_running = total number of running jobs
# $Global::total_started = total jobs started # $Global::total_started = total jobs started
sub save_sig_stdin_stdout_stderr {
# Remember the original signal handler, STDIN, STDOUT and STDERR
# Returns: N/A
%Global::original_sig = %SIG;
$SIG{TERM} = sub {}; # Dummy until jobs really start
open $Global::original_stdout, ">&", "STDOUT" or
::die_bug("Can't dup STDOUT: $!");
open $Global::original_stderr, ">&", "STDERR" or
::die_bug("Can't dup STDERR: $!");
open $Global::original_stdin, "<&", "STDIN" or
::die_bug("Can't dup STDIN: $!");
}
sub init_run_jobs { sub init_run_jobs {
$Global::total_running = 0; $Global::total_running = 0;
$Global::total_started = 0; $Global::total_started = 0;
@ -1483,13 +1492,15 @@ sub start_another_job {
::usleep(rand()*300); ::usleep(rand()*300);
::warning("No more processes: ", ::warning("No more processes: ",
"Decreasing number of running jobs to $max. ", "Decreasing number of running jobs to $max. ",
"Raising ulimit -u may help.\n"); "Raising ulimit -u or /etc/security/limits.conf may help.\n");
return 0; return 0;
} }
} }
} else { } else {
# No more file handles # No more file handles
debug("Not starting: no more file handles\n"); $Global::no_more_file_handles_warned++ or
::warning("No more file handles. ".
"Raising ulimit -n or /etc/security/limits.conf may help.\n");
return 0; return 0;
} }
} }
@ -1518,8 +1529,8 @@ sub drain_job_queue {
if($opt::pipe) { if($opt::pipe) {
# When using --pipe sometimes file handles are not closed properly # When using --pipe sometimes file handles are not closed properly
for my $job (values %Global::running) { for my $job (values %Global::running) {
my $fh = $job->stdin(); my $stdin_fh = $job->fd(0);
close $fh; close $stdin_fh;
} }
} }
if($opt::progress) { if($opt::progress) {
@ -1915,6 +1926,14 @@ sub cleanup_basefile {
sub __SIGNAL_HANDLING__ {} sub __SIGNAL_HANDLING__ {}
sub save_original_signal_handler {
# Remember the original signal handler
# Returns: N/A
$SIG{TERM} ||= sub { exit 0; }; # $SIG{TERM} is not set on Mac OS X
%Global::original_sig = %SIG;
$SIG{TERM} = sub {}; # Dummy until jobs really start
}
sub list_running_jobs { sub list_running_jobs {
# Returns: N/A # Returns: N/A
for my $v (values %Global::running) { for my $v (values %Global::running) {
@ -2306,8 +2325,10 @@ sub debug {
# Returns: N/A # Returns: N/A
$Global::debug or return; $Global::debug or return;
@_ = grep { defined $_ ? $_ : "" } @_; @_ = grep { defined $_ ? $_ : "" } @_;
if($Global::original_stdout) { if($Global::fd{1}) {
print $Global::original_stdout @_; # Original stdout was saved
my $stdout = $Global::fd{1};
print $stdout @_;
} else { } else {
print @_; print @_;
} }
@ -2865,16 +2886,16 @@ sub processes_available_by_system_limit {
if($system_limit < $wanted_processes) { if($system_limit < $wanted_processes) {
# The system_limit is less than the wanted_processes # The system_limit is less than the wanted_processes
if($system_limit < 1 and not $Global::JobQueue->empty()) { if($system_limit < 1 and not $Global::JobQueue->empty()) {
::warning("Cannot spawn any jobs. Raising ulimit -u may help.\n"); ::warning("Cannot spawn any jobs. Raising ulimit -u or /etc/security/limits.conf may help.\n");
::wait_and_exit(255); ::wait_and_exit(255);
} }
if(not $more_filehandles) { if(not $more_filehandles) {
::warning("Only enough filehandles to run ", $system_limit, ::warning("Only enough file handles to run ", $system_limit, " jobs in parallel.\n",
" jobs in parallel. Raising ulimit -n may help.\n"); "Raising ulimit -n or /etc/security/limits.conf may help.\n");
} }
if($max_system_proc_reached) { if($max_system_proc_reached) {
::warning("Only enough available processes to run ", $system_limit, ::warning("Only enough available processes to run ", $system_limit,
" jobs in parallel. Raising ulimit -u may help.\n"); " jobs in parallel. Raising ulimit -u or /etc/security/limits.conf may help.\n");
} }
} }
if($] == 5.008008 and $system_limit > 1000) { if($] == 5.008008 and $system_limit > 1000) {
@ -3582,10 +3603,7 @@ sub new {
'commandline' => $commandline, # The commandline with no args 'commandline' => $commandline, # The commandline with no args
'workdir' => undef, # --workdir 'workdir' => undef, # --workdir
'stdin' => undef, # filehandle for stdin (used for --pipe) 'stdin' => undef, # filehandle for stdin (used for --pipe)
'stdout' => undef, # filehandle for stdout (used for --group)
# filename for writing stdout to (used for --files) # filename for writing stdout to (used for --files)
'stdoutfilename' => undef,
'stderr' => undef, # filehandle for stderr (used for --group)
'remaining' => "", # remaining data not sent to stdin (used for --pipe) 'remaining' => "", # remaining data not sent to stdin (used for --pipe)
'datawritten' => 0, # amount of data sent via stdin (used for --pipe) 'datawritten' => 0, # amount of data sent via stdin (used for --pipe)
'transfersize' => 0, # size of files using --transfer 'transfersize' => 0, # size of files using --transfer
@ -3628,65 +3646,53 @@ sub openresultsfile {
::error("Cannot write to `$name'.\n"); ::error("Cannot write to `$name'.\n");
::wait_and_exit(255); ::wait_and_exit(255);
} }
$self->set_stdoutfilename($name); $self->set_fd_file_name(1,$name);
# prefix/name1/val1/name2/val2/stderr # prefix/name1/val1/name2/val2/stderr
$name = "$dir/stderr"; $name = "$dir/stderr";
if(not open($errfh,"+>",$name)) { if(not open($errfh,"+>",$name)) {
::error("Cannot write to `$name'.\n"); ::error("Cannot write to `$name'.\n");
::wait_and_exit(255); ::wait_and_exit(255);
} }
$self->set_fd_file_name(2,$name);
open OUT, '>&', $outfh or ::die_bug("Can't redirect STDOUT: $!"); open OUT, '>&', $outfh or ::die_bug("Can't redirect STDOUT: $!");
open ERR, '>&', $errfh or ::die_bug("Can't dup STDOUT: $!"); open ERR, '>&', $errfh or ::die_bug("Can't dup STDOUT: $!");
$self->set_stdout($outfh); $self->set_fd(1,$outfh);
$self->set_stderr($errfh); $self->set_fd(2,$errfh);
} }
sub set_stdout { sub set_fd {
# Set file descriptor
my $self = shift; my $self = shift;
$self->{'stdout'} = shift; my $fd_no = shift;
$self->{'fd'}{$fd_no} = shift;
} }
sub stdout { sub fd {
# Get file descriptor
my $self = shift; my $self = shift;
return $self->{'stdout'}; my $fd_no = shift;
return $self->{'fd'}{$fd_no};
} }
sub set_stdoutfilename { sub set_fd_file_name {
# Set file name for a file descriptor
my $self = shift; my $self = shift;
$self->{'stdoutfilename'} = shift; my $fd_no = shift;
$self->{'fd_file_name',$fd_no} = shift;
} }
sub stdoutfilename { sub fd_file_name {
# Get file name for a file descriptor
my $self = shift; my $self = shift;
return $self->{'stdoutfilename'}; my $fd_no = shift;
} return $self->{'fd_file_name',$fd_no};
sub stderr {
my $self = shift;
return $self->{'stderr'};
}
sub set_stderr {
my $self = shift;
$self->{'stderr'} = shift;
}
sub stdin {
my $self = shift;
return $self->{'stdin'};
}
sub set_stdin {
my $self = shift;
my $stdin = shift;
$self->{'stdin'} = $stdin;
} }
sub write { sub write {
my $self = shift; my $self = shift;
my $remaining_ref = shift; my $remaining_ref = shift;
my $in = $self->{'stdin'}; my $stdin_fh = $self->fd(0);
syswrite($in,$$remaining_ref); syswrite($stdin_fh,$$remaining_ref);
} }
sub set_stdin_buffer { sub set_stdin_buffer {
@ -3787,7 +3793,7 @@ sub runtime {
# Returns: # Returns:
# Run time in seconds # Run time in seconds
my $self = shift; my $self = shift;
return int(($self->endtime() - $self->starttime())*1000)/1000; return sprintf("%.3f",int(($self->endtime() - $self->starttime())*1000)/1000);
} }
sub endtime { sub endtime {
@ -4263,15 +4269,15 @@ sub start {
# To group we create temporary files for STDOUT and STDERR # To group we create temporary files for STDOUT and STDERR
# To avoid the cleanup unlink the files immediately (but keep them open) # To avoid the cleanup unlink the files immediately (but keep them open)
($outfh, $name) = ::tempfile(SUFFIX => ".par"); ($outfh, $name) = ::tempfile(SUFFIX => ".par");
$job->set_stdoutfilename($name); $job->set_fd_file_name(1,$name);
$opt::files or unlink $name; $opt::files or unlink $name;
($errfh, $name) = ::tempfile(SUFFIX => ".par"); ($errfh, $name) = ::tempfile(SUFFIX => ".par");
unlink $name; unlink $name;
open OUT, '>&', $outfh or ::die_bug("Can't redirect STDOUT: $!"); open OUT, '>&', $outfh or ::die_bug("Can't redirect STDOUT: $!");
open ERR, '>&', $errfh or ::die_bug("Can't dup STDOUT: $!"); open ERR, '>&', $errfh or ::die_bug("Can't dup STDOUT: $!");
$job->set_stdout($outfh); $job->set_fd(1,$outfh);
$job->set_stderr($errfh); $job->set_fd(2,$errfh);
} else { } else {
(*OUT,*ERR)=(*STDOUT,*STDERR); (*OUT,*ERR)=(*STDOUT,*STDERR);
} }
@ -4292,7 +4298,7 @@ sub start {
::debug("$Global::total_running processes. Starting (" ::debug("$Global::total_running processes. Starting ("
. $job->seq() . "): $command\n"); . $job->seq() . "): $command\n");
if($opt::pipe) { if($opt::pipe) {
my ($in); my ($stdin_fh);
# Wrap command with end-of-file detector, # Wrap command with end-of-file detector,
# so we do not spawn a program if there is no input. # so we do not spawn a program if there is no input.
# Exit value: # Exit value:
@ -4309,11 +4315,11 @@ sub start {
"($command);"; "($command);";
# The eval is needed to catch exception from open3 # The eval is needed to catch exception from open3
eval { eval {
$pid = ::open3($in, ">&OUT", ">&ERR", $ENV{SHELL}, "-c", $command) || $pid = ::open3($stdin_fh, ">&OUT", ">&ERR", $ENV{SHELL}, "-c", $command) ||
::die_bug("open3-pipe"); ::die_bug("open3-pipe");
1; 1;
}; };
$job->set_stdin($in); $job->set_fd(0,$stdin_fh);
} elsif(@opt::a and not $Global::stdin_in_opt_a and $job->seq() == 1 } elsif(@opt::a and not $Global::stdin_in_opt_a and $job->seq() == 1
and $job->sshlogin()->string() eq ":") { and $job->sshlogin()->string() eq ":") {
# Give STDIN to the first job if using -a (but only if running # Give STDIN to the first job if using -a (but only if running
@ -4326,7 +4332,7 @@ sub start {
1; 1;
}; };
# Re-open to avoid complaining # Re-open to avoid complaining
open STDIN, "<&", $Global::original_stdin open(STDIN, "<&", $Global::original_stdin)
or ::die_bug("dup-\$Global::original_stdin: $!"); or ::die_bug("dup-\$Global::original_stdin: $!");
} elsif ($opt::tty and not $Global::tty_taken and -c "/dev/tty" and } elsif ($opt::tty and not $Global::tty_taken and -c "/dev/tty" and
open(my $devtty_fh, "<", "/dev/tty")) { open(my $devtty_fh, "<", "/dev/tty")) {
@ -4417,18 +4423,16 @@ sub print {
if($opt::pipe and $self->virgin()) { if($opt::pipe and $self->virgin()) {
# Nothing was printed to this job: # Nothing was printed to this job:
# cleanup tmp files if --files was set # cleanup tmp files if --files was set
unlink $self->{'stdoutfilename'}; unlink $self->fd_file_name(1);
return; return;
} }
if($opt::dryrun) { if($opt::dryrun) {
# Nothing was printed to this job: # Nothing was printed to this job:
# cleanup tmp files if --files was set # cleanup tmp files if --files was set
unlink $self->{'stdoutfilename'}; unlink $self->fd_file_name(1);
} }
# Only relevant for grouping # Only relevant for grouping
$Global::grouped or return; $Global::grouped or return;
my $out = $self->stdout();
my $err = $self->stderr();
my $command = $self->sshlogin_wrap(); my $command = $self->sshlogin_wrap();
if($Global::joblog) { if($Global::joblog) {
@ -4461,60 +4465,61 @@ sub print {
# so flush to avoid STDOUT being buffered # so flush to avoid STDOUT being buffered
flush STDOUT; flush STDOUT;
} }
seek $err, 0, 0; for my $fdno (sort { $a <=> $b } keys %Global::fd) {
if($Global::debug) { # Sort by file descriptor numerically: 1,2,3,..,9,10,11
print STDERR "ERR:\n"; $fdno == 0 and next;
} my $out_fd = $Global::fd{$fdno};
if($opt::tag or defined $opt::tagstring) { my $in_fd = $self->fd($fdno);
my $tag = $self->tag(); if(not $in_fd) {
# OpenSSH_3.6.1p2 gives 'tcgetattr: Invalid argument' with -tt # ::warning("File descriptor $fdno not defined\n");
# This is a crappy way of ignoring it. next;
while(<$err>) {
if($_ ne "tcgetattr: Invalid argument\n") {
print STDERR $tag,$_;
}
# At most run the loop once
last;
} }
while(<$err>) { seek $in_fd, 0, 0;
print STDERR $tag,$_;
}
} else {
my $buf;
sysread($err,$buf,1_000_000);
# OpenSSH_3.6.1p2 gives 'tcgetattr: Invalid argument' with -tt
$buf =~ s/^tcgetattr: Invalid argument\n//;
print STDERR $buf;
while(sysread($err,$buf,1_000_000)) {
print STDERR $buf;
}
}
flush STDERR;
if($opt::files) {
print STDOUT $self->{'stdoutfilename'},"\n";
} else {
my $buf;
seek $out, 0, 0;
if($Global::debug) { if($Global::debug) {
print STDOUT "OUT:\n"; print STDERR "File descriptor $fdno:\n";
} }
if($opt::tag or defined $opt::tagstring) { if($opt::files) {
my $tag = $self->tag(); $self->fd_file_name($fdno) and print $out_fd $self->fd_file_name($fdno),"\n";
while(<$out>) {
print STDOUT $tag,$_;
}
} else { } else {
my $buf; my $buf;
while(sysread($out,$buf,1_000_000)) { seek $in_fd, 0, 0;
print STDOUT $buf; if($Global::debug) {
print STDOUT "OUT:\n";
}
if($opt::tag or defined $opt::tagstring) {
my $tag = $self->tag();
if($fdno == 2) {
# OpenSSH_3.6.1p2 gives 'tcgetattr: Invalid argument' with -tt
# This is a crappy way of ignoring it.
while(<$in_fd>) {
if($_ ne "tcgetattr: Invalid argument\n") {
print $out_fd $tag,$_;
}
# At most run the loop once
last;
}
}
while(<$in_fd>) {
print $out_fd $tag,$_;
}
} else {
my $buf;
if($fdno == 2) {
# OpenSSH_3.6.1p2 gives 'tcgetattr: Invalid argument' with -tt
# This is a crappy way of ignoring it.
sysread($in_fd,$buf,1_000_000);
$buf =~ s/^tcgetattr: Invalid argument\n//;
print $out_fd $buf;
}
while(sysread($in_fd,$buf,1_000_000)) {
print $out_fd $buf;
}
} }
} }
flush STDOUT; flush $out_fd;
::debug("<<joboutput $command\n"); ::debug("<<joboutput $command\n");
close $in_fd;
} }
close $out;
close $err;
} }
sub tag { sub tag {
@ -6006,6 +6011,6 @@ sub mkdir_or_die {
} }
# Keep perl -w happy # Keep perl -w happy
$opt::x = $Semaphore::timeout = $Semaphore::wait = $opt::shebang = $opt::x = $Semaphore::timeout = $Semaphore::wait = $opt::shebang = $Global::no_more_file_handles_warned =
0; 0;

View file

@ -397,7 +397,7 @@ I<regexp> is a Perl Regular Expression:
http://perldoc.perl.org/perlre.html http://perldoc.perl.org/perlre.html
=item B<--ctrlc> (beta testing) =item B<--ctrlc>
Sends SIGINT to tasks running on remote computers thus killing them. Sends SIGINT to tasks running on remote computers thus killing them.
@ -458,13 +458,14 @@ If I<eof-str> is omitted, there is no end of file string. If neither
B<-E> nor B<-e> is used, no end of file string is used. B<-E> nor B<-e> is used, no end of file string is used.
=item B<--env> I<var> =item B<--env> I<var> (alpha testing)
Copy environment variable I<var>. This will copy I<var> to the Copy environment variable I<var>. This will copy I<var> to the
environment that the command is run in. This is especially useful for environment that the command is run in. This is especially useful for
remote environments. remote execution.
Caveat: If I<var> contains newline ('\n') the value is messed up. In Bash I<var> can also be a Bash function - just remember to B<export
-f> the function.
=item B<--eta> =item B<--eta>
@ -485,7 +486,7 @@ See also: B<--bg>, B<man sem>
Implies B<--semaphore>. Implies B<--semaphore>.
=item B<--filter-hosts> (alpha testing) =item B<--filter-hosts> (beta testing)
Remove down hosts. For each remote host: check that login through ssh Remove down hosts. For each remote host: check that login through ssh
works. If not: do not use this host. works. If not: do not use this host.
@ -1100,6 +1101,19 @@ B<--return> is ignored when used with B<--sshlogin :> or when not used
with B<--sshlogin>. with B<--sshlogin>.
=item B<--round-robin> (alpha testing)
=item B<--round> (alpha testing)
Normally B<--pipe> will give a single block to each instance of the
command. With B<--round-robin> all blocks will at random be written to
commands already running. This is useful if the command takes a long
time to initialize.
B<--keep-order> will not work with B<--round-robin> as it is
impossible to track which input block corresponds to which output.
=item B<--max-chars>=I<max-chars> =item B<--max-chars>=I<max-chars>
=item B<-s> I<max-chars> =item B<-s> I<max-chars>
@ -1370,7 +1384,7 @@ different dir for the files. Setting B<--tmpdir> is equivalent to
setting $TMPDIR. setting $TMPDIR.
=item B<--timeout> I<val> (beta testing) =item B<--timeout> I<val>
Time out for command. If the command runs for longer than I<val> Time out for command. If the command runs for longer than I<val>
seconds it will get killed with SIGTERM, followed by SIGTERM 200 ms seconds it will get killed with SIGTERM, followed by SIGTERM 200 ms
@ -1579,7 +1593,7 @@ See also B<-m>.
Exit if the size (see the B<-s> option) is exceeded. Exit if the size (see the B<-s> option) is exceeded.
=item B<--xapply> (alpha testing) =item B<--xapply> (beta testing)
Read multiple input sources like B<xapply>. If multiple input sources Read multiple input sources like B<xapply>. If multiple input sources
are given, one argument will be read from each of the input are given, one argument will be read from each of the input

View file

@ -420,8 +420,8 @@ separating the columns. The n'th column can be access using
@emph{regexp} is a Perl Regular Expression: @emph{regexp} is a Perl Regular Expression:
http://perldoc.perl.org/perlre.html http://perldoc.perl.org/perlre.html
@item @strong{--ctrlc} (beta testing) @item @strong{--ctrlc}
@anchor{@strong{--ctrlc} (beta testing)} @anchor{@strong{--ctrlc}}
Sends SIGINT to tasks running on remote computers thus killing them. Sends SIGINT to tasks running on remote computers thus killing them.
@ -485,14 +485,15 @@ because it is POSIX compliant for @strong{xargs} while this option is not.
If @emph{eof-str} is omitted, there is no end of file string. If neither If @emph{eof-str} is omitted, there is no end of file string. If neither
@strong{-E} nor @strong{-e} is used, no end of file string is used. @strong{-E} nor @strong{-e} is used, no end of file string is used.
@item @strong{--env} @emph{var} @item @strong{--env} @emph{var} (alpha testing)
@anchor{@strong{--env} @emph{var}} @anchor{@strong{--env} @emph{var} (alpha testing)}
Copy environment variable @emph{var}. This will copy @emph{var} to the Copy environment variable @emph{var}. This will copy @emph{var} to the
environment that the command is run in. This is especially useful for environment that the command is run in. This is especially useful for
remote environments. remote execution.
Caveat: If @emph{var} contains newline ('\n') the value is messed up. In Bash @emph{var} can also be a Bash function - just remember to @strong{export
-f} the function.
@item @strong{--eta} @item @strong{--eta}
@anchor{@strong{--eta}} @anchor{@strong{--eta}}
@ -512,8 +513,8 @@ See also: @strong{--bg}, @strong{man sem}
Implies @strong{--semaphore}. Implies @strong{--semaphore}.
@item @strong{--filter-hosts} (alpha testing) @item @strong{--filter-hosts} (beta testing)
@anchor{@strong{--filter-hosts} (alpha testing)} @anchor{@strong{--filter-hosts} (beta testing)}
Remove down hosts. For each remote host: check that login through ssh Remove down hosts. For each remote host: check that login through ssh
works. If not: do not use this host. works. If not: do not use this host.
@ -1180,6 +1181,20 @@ times:
@strong{--return} is ignored when used with @strong{--sshlogin :} or when not used @strong{--return} is ignored when used with @strong{--sshlogin :} or when not used
with @strong{--sshlogin}. with @strong{--sshlogin}.
@item @strong{--round-robin} (alpha testing)
@anchor{@strong{--round-robin} (alpha testing)}
@item @strong{--round} (alpha testing)
@anchor{@strong{--round} (alpha testing)}
Normally @strong{--pipe} will give a single block to each instance of the
command. With @strong{--round-robin} all blocks will at random be written to
commands already running. This is useful if the command takes a long
time to initialize.
@strong{--keep-order} will not work with @strong{--round-robin} as it is
impossible to track which input block corresponds to which output.
@item @strong{--max-chars}=@emph{max-chars} @item @strong{--max-chars}=@emph{max-chars}
@anchor{@strong{--max-chars}=@emph{max-chars}} @anchor{@strong{--max-chars}=@emph{max-chars}}
@ -1473,8 +1488,8 @@ into temporary files in /tmp. By setting @strong{--tmpdir} you can use a
different dir for the files. Setting @strong{--tmpdir} is equivalent to different dir for the files. Setting @strong{--tmpdir} is equivalent to
setting $TMPDIR. setting $TMPDIR.
@item @strong{--timeout} @emph{val} (beta testing) @item @strong{--timeout} @emph{val}
@anchor{@strong{--timeout} @emph{val} (beta testing)} @anchor{@strong{--timeout} @emph{val}}
Time out for command. If the command runs for longer than @emph{val} Time out for command. If the command runs for longer than @emph{val}
seconds it will get killed with SIGTERM, followed by SIGTERM 200 ms seconds it will get killed with SIGTERM, followed by SIGTERM 200 ms
@ -1695,8 +1710,8 @@ See also @strong{-m}.
Exit if the size (see the @strong{-s} option) is exceeded. Exit if the size (see the @strong{-s} option) is exceeded.
@item @strong{--xapply} (alpha testing) @item @strong{--xapply} (beta testing)
@anchor{@strong{--xapply} (alpha testing)} @anchor{@strong{--xapply} (beta testing)}
Read multiple input sources like @strong{xapply}. If multiple input sources Read multiple input sources like @strong{xapply}. If multiple input sources
are given, one argument will be read from each of the input are given, one argument will be read from each of the input

View file

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

View file

@ -5,50 +5,72 @@
# 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 -k -j4 -L1 cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -k -j4 -L1
echo '### Test if we can deal with output > 4 GB' echo '### Test if we can deal with output > 4 GB'
# echo | niceload --io 10 parallel -q perl -e '"\$a=\"x\"x1000000;for(0..4300){print \$a}"' | md5sum ## echo | niceload --io 10 parallel -q perl -e '"\$a=\"x\"x1000000;for(0..4300){print \$a}"' | md5sum
echo | parallel -q perl -e '$a="x"x1000000;for(0..4300){print $a}' | md5sum echo | parallel -q perl -e '$a="x"x1000000;for(0..4300){print $a}' | md5sum
echo '**'
echo "### Test Force outside the file handle limit, 2009-02-17 Gave fork error" echo "### Test Force outside the file handle limit, 2009-02-17 Gave fork error"
(echo echo Start; seq 1 20000 | perl -pe 's/^/true /'; echo echo end) | stdout parallel -uj 0 | egrep -v 'processes took|adjusting' (echo echo Start; seq 1 20000 | perl -pe 's/^/true /'; echo echo end) | stdout parallel -uj 0 | egrep -v 'processes took|adjusting'
echo '**'
echo '### Test of --retries on unreachable host' echo '### Test of --retries on unreachable host'
seq 2 | stdout parallel -k --retries 2 -v -S 4.3.2.1,: echo seq 2 | stdout parallel -k --retries 2 -v -S 4.3.2.1,: echo
echo '**'
echo '### Test race condition on 8 CPU (my laptop)'; echo '### Test race condition on 8 CPU (my laptop)';
seq 1 5000000 > /tmp/parallel_test; seq 1 5000000 > /tmp/parallel_test;
seq 1 10 | parallel -k "cat /tmp/parallel_test | parallel --pipe --recend '' -k gzip >/dev/null; echo {}" seq 1 10 | parallel -k "cat /tmp/parallel_test | parallel --pipe --recend '' -k gzip >/dev/null; echo {}"
echo '**'
echo '### Test exit val - true'; echo '### Test exit val - true';
echo true | parallel; echo true | parallel;
echo $? echo $?
echo '**'
echo '### Test exit val - false'; echo '### Test exit val - false';
echo false | parallel; echo false | parallel;
echo $? echo $?
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 $?;
(echo "sleep 1;true"; echo "sleep 2;false";echo "sleep 3;true";echo "sleep 4; non_exist") | parallel -j10 --halt 0; (echo "sleep 1;true"; echo "sleep 2;false";echo "sleep 3;true";echo "sleep 4; non_exist") | parallel -j10 --halt 0;
echo $? echo $?
echo '**'
echo '### Test --halt-on-error 1'; 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 "sleep 1;true"; echo "sleep 2;false";echo "sleep 3;true") | parallel -j10 --halt-on-error 1;
echo $?; echo $?;
(echo "sleep 1;true"; echo "sleep 2;false";echo "sleep 3;true";echo "sleep 4; non_exist") | parallel -j10 --halt 1; (echo "sleep 1;true"; echo "sleep 2;false";echo "sleep 3;true";echo "sleep 4; non_exist") | parallel -j10 --halt 1;
echo $? echo $?
echo '**'
echo '### Test --halt-on-error 2'; 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 "sleep 1;true"; echo "sleep 2;false";echo "sleep 3;true") | parallel -j10 --halt-on-error 2;
echo $?; echo $?;
(echo "sleep 1;true"; echo "sleep 2;false";echo "sleep 3;true";echo "sleep 4; non_exist") | parallel -j10 --halt 2; (echo "sleep 1;true"; echo "sleep 2;false";echo "sleep 3;true";echo "sleep 4; non_exist") | parallel -j10 --halt 2;
echo $? echo $?
echo '### Test last dying print --halt-on-error'; echo '**'
echo '### Test last dying print --halt-on-error 1';
(seq 0 8;echo 0; echo 9) | parallel -j10 -kq --halt 1 perl -e 'sleep $ARGV[0];print STDERR @ARGV,"\n"; exit shift'; (seq 0 8;echo 0; echo 9) | parallel -j10 -kq --halt 1 perl -e 'sleep $ARGV[0];print STDERR @ARGV,"\n"; exit shift';
echo $?; echo exit code $?
echo '### Test last dying print --halt-on-error 2';
(seq 0 8;echo 0; echo 9) | parallel -j10 -kq --halt 2 perl -e 'sleep $ARGV[0];print STDERR @ARGV,"\n"; exit shift'; (seq 0 8;echo 0; echo 9) | parallel -j10 -kq --halt 2 perl -e 'sleep $ARGV[0];print STDERR @ARGV,"\n"; exit shift';
echo $? echo exit code $?
echo '**'
echo '### Test slow arguments generation - https://savannah.gnu.org/bugs/?32834'; echo '### Test slow arguments generation - https://savannah.gnu.org/bugs/?32834';
seq 1 3 | parallel -j1 "sleep 2; echo {}" | parallel -kj2 echo seq 1 3 | parallel -j1 "sleep 2; echo {}" | parallel -kj2 echo

View file

@ -35,11 +35,17 @@ parallel -S localhost --env SPC echo 'a"$SPC"b' ::: 5
parallel -S csh@localhost --env SPC echo 'a"$SPC"b' ::: 5 parallel -S csh@localhost --env SPC echo 'a"$SPC"b' ::: 5
parallel -S tcsh@localhost --env SPC echo 'a"$SPC"b' ::: 5 parallel -S tcsh@localhost --env SPC echo 'a"$SPC"b' ::: 5
echo '### Test --env for \n and \\ - single and double - no output is good' echo '### Test --env for \n and \\ - single and double (bash only) - no output is good'
perl -e 'for(10,92) { printf "%c%c %c%d\0",$_,$_,$_,$_ }' | stdout parallel --nice 19 -j4 -k -I // --arg-sep _ -0 V=// V2=V2=// parallel -k -j1 -S :,1/lo,1/tcsh@lo,1/csh@lo --env V,V2 echo \''"{}$V$V2"'\' ::: {#} {#} {#} {#} | sort | uniq -c | grep -v ' 4 '|grep -v xauth |grep -v X11 perl -e 'for(10,92) { printf "%c%c %c%d\0",$_,$_,$_,$_ }' | stdout parallel --nice 19 -j4 -k -I // --arg-sep _ -0 V=// V2=V2=// parallel -k -j1 -S 2/:,2/lo --env V,V2 echo \''"{}$V$V2"'\' ::: {#} {#} {#} {#} | sort | uniq -c | grep -v ' 4 '|grep -v xauth |grep -v X11
echo '### Test --env for \n and \\ - single and double --onall - no output is good' echo '### Test --env for \n and \\ - single and double (*csh only) - no output is good'
perl -e 'for(10,92) { printf "%c%c %c%d\0",$_,$_,$_,$_ }' | stdout parallel --nice 19 -j4 -k -I // --arg-sep _ -0 V=// V2=V2=// parallel -k -j1 -S :,1/lo,1/tcsh@lo,1/csh@lo --onall --env V,V2 echo \''"{}$V$V2"'\' ::: {#} | sort | uniq -c | grep -v ' 4 '|grep -v xauth |grep -v X11 perl -e 'for(10,92) { printf "%c%c %c%d\0",$_,$_,$_,$_ }' | stdout parallel --nice 19 -j4 -k -I // --arg-sep _ -0 V=// V2=V2=// parallel -k -j1 -S 2/tcsh@lo,2/csh@lo --env V,V2 echo \''"{}$V$V2"'\' ::: {#} {#} {#} {#} | sort | uniq -c | grep -v ' 4 '|grep -v xauth |grep -v X11
echo '### Test --env for \n and \\ - single and double --onall (bash only) - no output is good'
perl -e 'for(10,92) { printf "%c%c %c%d\0",$_,$_,$_,$_ }' | stdout parallel --nice 19 -j4 -k -I // --arg-sep _ -0 V=// V2=V2=// parallel -k -j1 -S :,lo --onall --env V,V2 echo \''"{}$V$V2"'\' ::: {#} | sort | uniq -c | grep -v ' 4 '|grep -v xauth |grep -v X11
echo '### Test --env for \n and \\ - single and double --onall (*csh only) - no output is good'
perl -e 'for(10,92) { printf "%c%c %c%d\0",$_,$_,$_,$_ }' | stdout parallel --nice 19 -j4 -k -I // --arg-sep _ -0 V=// V2=V2=// parallel -k -j1 -S 1/tcsh@lo,1/csh@lo --onall --env V,V2 echo \''"{}$V$V2"'\' ::: {#} | sort | uniq -c | grep -v ' 2 '|grep -v xauth |grep -v X11
echo '### Test --env for \160 - which kills csh - single and double - no output is good' echo '### Test --env for \160 - which kills csh - single and double - no output is good'
perl -e 'for(160) { printf "%c%c %c%d\0",$_,$_,$_,$_ }' | stdout parallel --nice 19 -j4 -k -I // --arg-sep _ -0 V=// V2=V2=// parallel -k -j1 -S :,1/lo,1/tcsh@lo --env V,V2 echo \''"{}$V$V2"'\' ::: {#} {#} {#} | uniq -c | grep -v ' 3 '|grep -v xauth |grep -v X11 perl -e 'for(160) { printf "%c%c %c%d\0",$_,$_,$_,$_ }' | stdout parallel --nice 19 -j4 -k -I // --arg-sep _ -0 V=// V2=V2=// parallel -k -j1 -S :,1/lo,1/tcsh@lo --env V,V2 echo \''"{}$V$V2"'\' ::: {#} {#} {#} | uniq -c | grep -v ' 3 '|grep -v xauth |grep -v X11

View file

@ -1,19 +1,29 @@
#!/bin/bash #!/bin/bash
P="scosysv centos dragonfly netbsd freebsd solaris openbsd debian aix hpux qnx irix suse minix openindiana mandriva unixware miros raspberrypi hurd ultrix ubuntu redhat" P_ALL="vax freebsd solaris openbsd netbsd debian alpha aix redhat hpux ultrix qnx irix tru64 openindiana suse openstep mandriva ubuntu scosysv unixware dragonfly centos miros hurd minix raspberrypi"
P="scosysv centos dragonfly netbsd freebsd solaris openbsd debian aix hpux qnx irix suse minix openindiana mandriva unixware raspberrypi hurd ultrix ubuntu" P_NOTWORKING="vax alpha openstep"
#P="scosysv hpux qnx irix openindiana ultrix" P_NOTWORKING_YET="ultrix tru64"
POLAR=`parallel echo {}.polarhome.com ::: $P`
P_WORKING="freebsd solaris openbsd netbsd debian aix redhat hpux qnx irix openindiana suse mandriva ubuntu scosysv unixware dragonfly centos miros hurd minix raspberrypi"
P="$P_WORKING"
POLAR=`parallel -k echo {}.polarhome.com ::: $P`
# Avoid the stupid /etc/issue.net banner at Polarhome
echo '### Tests on polarhome machines' echo '### Tests on polarhome machines'
echo 'Setup on polarhome machines' echo 'Setup on polarhome machines'
stdout parallel -kj0 ssh {} mkdir -p bin ::: $POLAR >/dev/null 2>/dev/null & stdout parallel -kj0 ssh -oLogLevel=quiet {} mkdir -p bin ::: $POLAR &
# scp to each polarhome machine do not work. From redhat it works. # scp to each polarhome machine do not work. Use cat
stdout rsync -a `which parallel` redhat.polarhome.com:bin/ copy_to_host() {
stdout ssh redhat.polarhome.com \ H=$1
chmod 755 bin/parallel\; \ # Avoid the stupid /etc/issue.net banner with -oLogLevel=quiet
bin/parallel --tag -kj0 -v --delay 0.2 ssh {} rm -f bin/parallel\\\;scp bin/parallel {}:bin/ ::: $POLAR | sort ssh -oLogLevel=quiet $H rm -f bin/parallel
cat `which parallel` | ssh -oLogLevel=quiet $H 'cat > bin/parallel; chmod 755 bin/parallel'
}
export -f copy_to_host
stdout parallel -j0 --timeout 20 --tag -kj0 -v copy_to_host {} ::: $POLAR
# Now test # Now test
echo 'Run the test on polarhome machines' echo '### Run the test on polarhome machines'
stdout parallel --argsep // -k --tag ssh {} bin/parallel -k echo Works on ::: {} // $POLAR | sort stdout parallel -j0 --argsep // -k --tag ssh -oLogLevel=quiet {} bin/perl bin/parallel -k echo Works on ::: {} // $POLAR

View file

@ -1,9 +1,12 @@
### Test if we can deal with output > 4 GB ### Test if we can deal with output > 4 GB
46a318993dfc8e2afd71ff2bc6f605f1 - 46a318993dfc8e2afd71ff2bc6f605f1 -
**
### Test Force outside the file handle limit, 2009-02-17 Gave fork error ### Test Force outside the file handle limit, 2009-02-17 Gave fork error
parallel: Warning: Only enough filehandles to run 506 jobs in parallel. Raising ulimit -n may help. parallel: Warning: Only enough file handles to run 506 jobs in parallel.
Raising ulimit -n or /etc/security/limits.conf may help.
Start Start
end end
**
### Test of --retries on unreachable host ### Test of --retries on unreachable host
ssh: connect to host 4.3.2.1 port 22: Connection timed out ssh: connect to host 4.3.2.1 port 22: Connection timed out
parallel: Warning: Could not figure out number of cpus on 4.3.2.1 (). Using 1. parallel: Warning: Could not figure out number of cpus on 4.3.2.1 (). Using 1.
@ -11,6 +14,7 @@ echo 1
1 1
echo 2 echo 2
2 2
**
### Test race condition on 8 CPU (my laptop) ### Test race condition on 8 CPU (my laptop)
1 1
2 2
@ -22,14 +26,21 @@ echo 2
8 8
9 9
10 10
**
### Test exit val - true ### Test exit val - true
0 0
**
### Test exit val - false ### Test exit val - false
1 1
/bin/bash: non_exist: command not found **
### Test --halt-on-error 0 ### Test --halt-on-error 0
1 1
2 2
/bin/bash: non_exist: command not found
**
### Test --halt-on-error 1
1
127
parallel: Starting no more jobs. Waiting for 2 jobs to finish. This job failed: parallel: Starting no more jobs. Waiting for 2 jobs to finish. This job failed:
sleep 2;false sleep 2;false
/bin/bash: non_exist: command not found /bin/bash: non_exist: command not found
@ -37,16 +48,17 @@ parallel: Starting no more jobs. Waiting for 3 jobs to finish. This job failed:
sleep 2;false sleep 2;false
parallel: Starting no more jobs. Waiting for 1 jobs to finish. This job failed: parallel: Starting no more jobs. Waiting for 1 jobs to finish. This job failed:
sleep 4; non_exist sleep 4; non_exist
### Test --halt-on-error 1 **
1
127
parallel: This job failed:
sleep 2;false
parallel: This job failed:
sleep 2;false
### Test --halt-on-error 2 ### Test --halt-on-error 2
1 1
1 1
parallel: This job failed:
sleep 2;false
parallel: This job failed:
sleep 2;false
**
### Test last dying print --halt-on-error 1
exit code 9
0 0
1 1
2 2
@ -76,13 +88,13 @@ parallel: Starting no more jobs. Waiting for 2 jobs to finish. This job failed:
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ shift 8 perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ shift 8
parallel: Starting no more jobs. Waiting for 1 jobs to finish. This job failed: parallel: Starting no more jobs. Waiting for 1 jobs to finish. This job failed:
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ shift 9 perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ shift 9
### Test last dying print --halt-on-error 2
exit code 1
0 0
1 1
parallel: This job failed: parallel: This job failed:
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ shift 1 perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ shift 1
### Test last dying print --halt-on-error **
9
1
### Test slow arguments generation - https://savannah.gnu.org/bugs/?32834 ### Test slow arguments generation - https://savannah.gnu.org/bugs/?32834
1 1
2 2

View file

@ -24,19 +24,25 @@ a' * ? >o <i*? ][\!#¤%=( ) | }b 5
a' * ? >o <i*? ][\!#¤%=( ) | }b 5 a' * ? >o <i*? ][\!#¤%=( ) | }b 5
a' * ? >o <i*? ][\!#¤%=( ) | }b 5 a' * ? >o <i*? ][\!#¤%=( ) | }b 5
a' * ? >o <i*? ][\!#¤%=( ) | }b 5 a' * ? >o <i*? ][\!#¤%=( ) | }b 5
### Test --env for \n and \\ - single and double - no output is good ### Test --env for \n and \\ - single and double (bash only) - no output is good
2 1 10V2= 10 8
8
### Test --env for \n and \\ - single and double (*csh only) - no output is good
2 2\ \92V2=\ \92
2 2\\ \92V2=\\ \92
16 : Command not found.
8 Unmatched ".
16 \ : Command not found.
### Test --env for \n and \\ - single and double --onall (bash only) - no output is good
2 1
2 10
2 10V2=
2 2\\ \92V2=\\ \92
### Test --env for \n and \\ - single and double --onall (*csh only) - no output is good
1 2\ \92V2=\ \92 1 2\ \92V2=\ \92
3 2\\ \92V2=\\ \92 1 2\\ \92V2=\\ \92
1 V: Undefined variable. 8 : Command not found.
1 export: Command not found. 4 Unmatched ".
2 setenv: Too many arguments. 8 \ : Command not found.
### Test --env for \n and \\ - single and double --onall - no output is good
2 1 10V2= 10
1 2\ \92V2=\ \92
3 2\\ \92V2=\\ \92
1 V: Undefined variable.
1 export: Command not found.
2 setenv: Too many arguments.
### Test --env for \160 - which kills csh - single and double - no output is good ### Test --env for \160 - which kills csh - single and double - no output is good
### Test --env for \160 - which kills csh - single and double --onall - no output is good ### Test --env for \160 - which kills csh - single and double --onall - no output is good

View file

@ -36,16 +36,16 @@ Cores should complete first on machines with less than 4 physical CPUs
cores done cores done
CPUs done CPUs done
### Test --tag ::: a ::: b ### Test --tag ::: a ::: b
a b stderr-a b
a b stdout-a b a b stdout-a b
a b stderr-a b
### Test --tag ::: a b ### Test --tag ::: a b
a stderr-a
a stdout-a a stdout-a
b stderr-b a stderr-a
b stdout-b b stdout-b
b stderr-b
### Test --tag -X ::: a b ### Test --tag -X ::: a b
a b stderr-a stderr-b
a b stdout-a stdout-b a b stdout-a stdout-b
a b stderr-a stderr-b
### Test bash redirection <() ### Test bash redirection <()
a a
b b

View file

@ -1,282 +1,48 @@
### Tests on polarhome machines ### Tests on polarhome machines
Setup on polarhome machines Setup on polarhome machines
Fedora release 17 (Beefy Miracle) copy_to_host freebsd.polarhome.com
Welcome to RedHat/Fedora ...member of polarhome.com realm copy_to_host solaris.polarhome.com
copy_to_host openbsd.polarhome.com
copy_to_host netbsd.polarhome.com
Fedora release 17 (Beefy Miracle) copy_to_host debian.polarhome.com
Welcome to RedHat/Fedora ...member of polarhome.com realm copy_to_host aix.polarhome.com
aix.polarhome.com copy_to_host redhat.polarhome.com
aix.polarhome.com copy_to_host hpux.polarhome.com
aix.polarhome.com Welcome to AIX7 ...member of polarhome.com realm copy_to_host qnx.polarhome.com
aix.polarhome.com Welcome to AIX7 ...member of polarhome.com realm copy_to_host irix.polarhome.com
centos.polarhome.com copy_to_host openindiana.polarhome.com
centos.polarhome.com copy_to_host suse.polarhome.com
centos.polarhome.com copy_to_host mandriva.polarhome.com
centos.polarhome.com copy_to_host ubuntu.polarhome.com
centos.polarhome.com CentOS release 5.6 (Final) copy_to_host scosysv.polarhome.com
centos.polarhome.com CentOS release 5.6 (Final) copy_to_host unixware.polarhome.com
centos.polarhome.com Welcome to CentOS ...member of polarhome.com realm copy_to_host dragonfly.polarhome.com
centos.polarhome.com Welcome to CentOS ...member of polarhome.com realm copy_to_host centos.polarhome.com
debian.polarhome.com copy_to_host miros.polarhome.com
debian.polarhome.com copy_to_host hurd.polarhome.com
debian.polarhome.com copy_to_host minix.polarhome.com
debian.polarhome.com copy_to_host raspberrypi.polarhome.com
debian.polarhome.com Debian GNU/Linux 6.0.2 (squeeze) ### Run the test on polarhome machines
debian.polarhome.com Debian GNU/Linux 6.0.2 (squeeze)
debian.polarhome.com Welcome to debian ...member of polarhome.com realm
debian.polarhome.com Welcome to debian ...member of polarhome.com realm
dragonfly.polarhome.com
dragonfly.polarhome.com
dragonfly.polarhome.com
dragonfly.polarhome.com
dragonfly.polarhome.com DragonFly v2.10.1.1
dragonfly.polarhome.com DragonFly v2.10.1.1
dragonfly.polarhome.com Welcome to DragonFly ...member of polarhome.com realm
dragonfly.polarhome.com Welcome to DragonFly ...member of polarhome.com realm
freebsd.polarhome.com
freebsd.polarhome.com
freebsd.polarhome.com
freebsd.polarhome.com
freebsd.polarhome.com FreeBSD 8.2
freebsd.polarhome.com FreeBSD 8.2
freebsd.polarhome.com Welcome to FreeBSD ...member of polarhome.com realm
freebsd.polarhome.com Welcome to FreeBSD ...member of polarhome.com realm
hpux.polarhome.com
hpux.polarhome.com
hpux.polarhome.com
hpux.polarhome.com
hpux.polarhome.com HP-UX hpux.polarhome.com B.11.11 U 9000/785 (ta)
hpux.polarhome.com HP-UX hpux.polarhome.com B.11.11 U 9000/785 (ta)
hpux.polarhome.com Welcome to HPUX... member of polarhome.com realm
hpux.polarhome.com Welcome to HPUX... member of polarhome.com realm
hurd.polarhome.com
hurd.polarhome.com
hurd.polarhome.com
hurd.polarhome.com
hurd.polarhome.com Debian GNU/Hurd wheezy/sid
hurd.polarhome.com Debian GNU/Hurd wheezy/sid
hurd.polarhome.com Welcome to hurd ...member of polarhome.com realm.
hurd.polarhome.com Welcome to hurd ...member of polarhome.com realm.
irix.polarhome.com
irix.polarhome.com
irix.polarhome.com IRIX64 6.5 07202013 IP35
irix.polarhome.com IRIX64 6.5 07202013 IP35
irix.polarhome.com Welcome to irix ...member of polarhome.com realm
irix.polarhome.com Welcome to irix ...member of polarhome.com realm
mandriva.polarhome.com
mandriva.polarhome.com
mandriva.polarhome.com
mandriva.polarhome.com
mandriva.polarhome.com Mandriva Linux release 2010.2 (Official) for x86_64
mandriva.polarhome.com Mandriva Linux release 2010.2 (Official) for x86_64
mandriva.polarhome.com Welcome to Mandrake/Mandriva ...member of polarhome.com realm
mandriva.polarhome.com Welcome to Mandrake/Mandriva ...member of polarhome.com realm
netbsd.polarhome.com
netbsd.polarhome.com
netbsd.polarhome.com
netbsd.polarhome.com
netbsd.polarhome.com NetBSD 5.1
netbsd.polarhome.com NetBSD 5.1
netbsd.polarhome.com Welcome to NetBSD ...member of polarhome.com realm
netbsd.polarhome.com Welcome to NetBSD ...member of polarhome.com realm
openbsd.polarhome.com
openbsd.polarhome.com
openbsd.polarhome.com
openbsd.polarhome.com
openbsd.polarhome.com OpenBSD 4.9
openbsd.polarhome.com OpenBSD 4.9
openbsd.polarhome.com Welcome to OpenBSD ...member of polarhome.com realm
openbsd.polarhome.com Welcome to OpenBSD ...member of polarhome.com realm
openindiana.polarhome.com
openindiana.polarhome.com
openindiana.polarhome.com
openindiana.polarhome.com
openindiana.polarhome.com OpenIndiana SunOS 5.11
openindiana.polarhome.com OpenIndiana SunOS 5.11
openindiana.polarhome.com Welcome to OpenIndiana ...member of polarhome.com realm
openindiana.polarhome.com Welcome to OpenIndiana ...member of polarhome.com realm
qnx.polarhome.com
qnx.polarhome.com
qnx.polarhome.com
qnx.polarhome.com
qnx.polarhome.com QNX 6.5.0
qnx.polarhome.com QNX 6.5.0
qnx.polarhome.com Welcome to QNX ...member of polarhome.com realm
qnx.polarhome.com Welcome to QNX ...member of polarhome.com realm
raspberrypi.polarhome.com
raspberrypi.polarhome.com
raspberrypi.polarhome.com Debian GNU/Linux 6.0
raspberrypi.polarhome.com Debian GNU/Linux 6.0
raspberrypi.polarhome.com RaspberryPi/bcm2708 reference 2.0
raspberrypi.polarhome.com RaspberryPi/bcm2708 reference 2.0
raspberrypi.polarhome.com Welcome to raspberrypi ...member of polarhome.com realm
raspberrypi.polarhome.com Welcome to raspberrypi ...member of polarhome.com realm
scosysv.polarhome.com
scosysv.polarhome.com
scosysv.polarhome.com SCO OpenServer(TM) Release 6
scosysv.polarhome.com SCO OpenServer(TM) Release 6
scosysv.polarhome.com Welcome to scosysv ...member of polarhome.com realm
scosysv.polarhome.com Welcome to scosysv ...member of polarhome.com realm
solaris.polarhome.com
solaris.polarhome.com
solaris.polarhome.com
solaris.polarhome.com
solaris.polarhome.com SUN Ultra-5
solaris.polarhome.com SUN Ultra-5
solaris.polarhome.com SunOS 5.10
solaris.polarhome.com SunOS 5.10
solaris.polarhome.com Welcome to Solaris ...member of polarhome.com realm
solaris.polarhome.com Welcome to Solaris ...member of polarhome.com realm
ssh aix.polarhome.com rm -f bin/parallel;scp bin/parallel aix.polarhome.com:bin/
ssh centos.polarhome.com rm -f bin/parallel;scp bin/parallel centos.polarhome.com:bin/
ssh debian.polarhome.com rm -f bin/parallel;scp bin/parallel debian.polarhome.com:bin/
ssh dragonfly.polarhome.com rm -f bin/parallel;scp bin/parallel dragonfly.polarhome.com:bin/
ssh freebsd.polarhome.com rm -f bin/parallel;scp bin/parallel freebsd.polarhome.com:bin/
ssh hpux.polarhome.com rm -f bin/parallel;scp bin/parallel hpux.polarhome.com:bin/
ssh hurd.polarhome.com rm -f bin/parallel;scp bin/parallel hurd.polarhome.com:bin/
ssh irix.polarhome.com rm -f bin/parallel;scp bin/parallel irix.polarhome.com:bin/
ssh mandriva.polarhome.com rm -f bin/parallel;scp bin/parallel mandriva.polarhome.com:bin/
ssh minix.polarhome.com rm -f bin/parallel;scp bin/parallel minix.polarhome.com:bin/
ssh netbsd.polarhome.com rm -f bin/parallel;scp bin/parallel netbsd.polarhome.com:bin/
ssh openbsd.polarhome.com rm -f bin/parallel;scp bin/parallel openbsd.polarhome.com:bin/
ssh openindiana.polarhome.com rm -f bin/parallel;scp bin/parallel openindiana.polarhome.com:bin/
ssh qnx.polarhome.com rm -f bin/parallel;scp bin/parallel qnx.polarhome.com:bin/
ssh raspberrypi.polarhome.com rm -f bin/parallel;scp bin/parallel raspberrypi.polarhome.com:bin/
ssh scosysv.polarhome.com rm -f bin/parallel;scp bin/parallel scosysv.polarhome.com:bin/
ssh solaris.polarhome.com rm -f bin/parallel;scp bin/parallel solaris.polarhome.com:bin/
ssh suse.polarhome.com rm -f bin/parallel;scp bin/parallel suse.polarhome.com:bin/
ssh ubuntu.polarhome.com rm -f bin/parallel;scp bin/parallel ubuntu.polarhome.com:bin/
ssh ultrix.polarhome.com rm -f bin/parallel;scp bin/parallel ultrix.polarhome.com:bin/
ssh unixware.polarhome.com rm -f bin/parallel;scp bin/parallel unixware.polarhome.com:bin/
suse.polarhome.com
suse.polarhome.com
suse.polarhome.com
suse.polarhome.com
suse.polarhome.com Welcome to SuSE/openSUSE ...member of polarhome.com realm
suse.polarhome.com Welcome to SuSE/openSUSE ...member of polarhome.com realm
suse.polarhome.com openSUSE 11.4 "Celadon"
suse.polarhome.com openSUSE 11.4 "Celadon"
ubuntu.polarhome.com
ubuntu.polarhome.com
ubuntu.polarhome.com
ubuntu.polarhome.com
ubuntu.polarhome.com Ubuntu 10.04.2 LTS
ubuntu.polarhome.com Ubuntu 10.04.2 LTS
ubuntu.polarhome.com Welcome to Ubuntu ...member of polarhome.com realm
ubuntu.polarhome.com Welcome to Ubuntu ...member of polarhome.com realm
unixware.polarhome.com
unixware.polarhome.com
unixware.polarhome.com SCO UnixWare 7.1.4
unixware.polarhome.com SCO UnixWare 7.1.4
unixware.polarhome.com Welcome to unixware ...member of polarhome.com realm
unixware.polarhome.com Welcome to unixware ...member of polarhome.com realm
Run the test on polarhome machines
aix.polarhome.com
aix.polarhome.com Welcome to AIX7 ...member of polarhome.com realm
aix.polarhome.com Works on aix.polarhome.com
centos.polarhome.com
centos.polarhome.com
centos.polarhome.com CentOS release 5.6 (Final)
centos.polarhome.com Welcome to CentOS ...member of polarhome.com realm
centos.polarhome.com Works on centos.polarhome.com
debian.polarhome.com
debian.polarhome.com
debian.polarhome.com Debian GNU/Linux 6.0.2 (squeeze)
debian.polarhome.com Welcome to debian ...member of polarhome.com realm
debian.polarhome.com Works on debian.polarhome.com
dragonfly.polarhome.com
dragonfly.polarhome.com
dragonfly.polarhome.com DragonFly v2.10.1.1
dragonfly.polarhome.com Welcome to DragonFly ...member of polarhome.com realm
dragonfly.polarhome.com Works on dragonfly.polarhome.com
freebsd.polarhome.com
freebsd.polarhome.com
freebsd.polarhome.com FreeBSD 8.2
freebsd.polarhome.com Welcome to FreeBSD ...member of polarhome.com realm
freebsd.polarhome.com Works on freebsd.polarhome.com freebsd.polarhome.com Works on freebsd.polarhome.com
hpux.polarhome.com solaris.polarhome.com Works on solaris.polarhome.com
hpux.polarhome.com
hpux.polarhome.com HP-UX hpux.polarhome.com B.11.11 U 9000/785 (ta)
hpux.polarhome.com No such file or directory: perl
hpux.polarhome.com Welcome to HPUX... member of polarhome.com realm
hurd.polarhome.com
hurd.polarhome.com
hurd.polarhome.com Debian GNU/Hurd wheezy/sid
hurd.polarhome.com Welcome to hurd ...member of polarhome.com realm.
hurd.polarhome.com Works on hurd.polarhome.com
irix.polarhome.com
irix.polarhome.com IRIX64 6.5 07202013 IP35
irix.polarhome.com Unknown open() mode '>&' at bin/parallel line 1310.
irix.polarhome.com Welcome to irix ...member of polarhome.com realm
mandriva.polarhome.com
mandriva.polarhome.com
mandriva.polarhome.com Mandriva Linux release 2010.2 (Official) for x86_64
mandriva.polarhome.com Welcome to Mandrake/Mandriva ...member of polarhome.com realm
mandriva.polarhome.com Works on mandriva.polarhome.com
minix.polarhome.com Works on minix.polarhome.com
netbsd.polarhome.com
netbsd.polarhome.com
netbsd.polarhome.com NetBSD 5.1
netbsd.polarhome.com Welcome to NetBSD ...member of polarhome.com realm
netbsd.polarhome.com Works on netbsd.polarhome.com
openbsd.polarhome.com
openbsd.polarhome.com
openbsd.polarhome.com OpenBSD 4.9
openbsd.polarhome.com Welcome to OpenBSD ...member of polarhome.com realm
openbsd.polarhome.com Works on openbsd.polarhome.com openbsd.polarhome.com Works on openbsd.polarhome.com
openindiana.polarhome.com netbsd.polarhome.com Works on netbsd.polarhome.com
openindiana.polarhome.com debian.polarhome.com Works on debian.polarhome.com
openindiana.polarhome.com OpenIndiana SunOS 5.11 aix.polarhome.com Works on aix.polarhome.com
openindiana.polarhome.com Welcome to OpenIndiana ...member of polarhome.com realm redhat.polarhome.com Works on redhat.polarhome.com
hpux.polarhome.com Works on hpux.polarhome.com
qnx.polarhome.com Works on qnx.polarhome.com
qnx.polarhome.com parallel: Warning: Cannot figure out number of CPU cores. Using 1.
irix.polarhome.com Unknown open() mode '>&=' at bin/parallel line 1316.
openindiana.polarhome.com Works on openindiana.polarhome.com openindiana.polarhome.com Works on openindiana.polarhome.com
openindiana.polarhome.com parallel: Warning: Cannot figure out number of CPU cores. Using 1. openindiana.polarhome.com parallel: Warning: Cannot figure out number of CPU cores. Using 1.
qnx.polarhome.com
qnx.polarhome.com
qnx.polarhome.com QNX 6.5.0
qnx.polarhome.com Welcome to QNX ...member of polarhome.com realm
qnx.polarhome.com perl: No such file or directory
raspberrypi.polarhome.com
raspberrypi.polarhome.com
raspberrypi.polarhome.com CentOS release 5.6 (Final)
raspberrypi.polarhome.com Welcome to CentOS ...member of polarhome.com realm
raspberrypi.polarhome.com Works on raspberrypi.polarhome.com
scosysv.polarhome.com
scosysv.polarhome.com SCO OpenServer(TM) Release 6
scosysv.polarhome.com Welcome to scosysv ...member of polarhome.com realm
scosysv.polarhome.com Works on scosysv.polarhome.com
solaris.polarhome.com
solaris.polarhome.com
solaris.polarhome.com SUN Ultra-5
solaris.polarhome.com SunOS 5.10
solaris.polarhome.com Welcome to Solaris ...member of polarhome.com realm
solaris.polarhome.com Works on solaris.polarhome.com
suse.polarhome.com
suse.polarhome.com
suse.polarhome.com Welcome to SuSE/openSUSE ...member of polarhome.com realm
suse.polarhome.com Works on suse.polarhome.com suse.polarhome.com Works on suse.polarhome.com
suse.polarhome.com openSUSE 11.4 "Celadon" mandriva.polarhome.com Works on mandriva.polarhome.com
ubuntu.polarhome.com
ubuntu.polarhome.com
ubuntu.polarhome.com Ubuntu 10.04.2 LTS
ubuntu.polarhome.com Welcome to Ubuntu ...member of polarhome.com realm
ubuntu.polarhome.com Works on ubuntu.polarhome.com ubuntu.polarhome.com Works on ubuntu.polarhome.com
ultrix.polarhome.com BEGIN failed--compilation aborted at File/Temp.pm line 148. scosysv.polarhome.com Works on scosysv.polarhome.com
ultrix.polarhome.com BEGIN failed--compilation aborted at bin/parallel line 28.
ultrix.polarhome.com BEGIN not safe after errors--compilation aborted at Errno.pm line 188.
ultrix.polarhome.com Global symbol "EXPORT_OK" requires explicit package name at Errno.pm line 14.
ultrix.polarhome.com Global symbol "EXPORT_TAGS" requires explicit package name at Errno.pm line 32.
ultrix.polarhome.com Global symbol "ISA" requires explicit package name at Errno.pm line 12.
ultrix.polarhome.com Global symbol "VERSION" requires explicit package name at Errno.pm line 10.
ultrix.polarhome.com Global symbol "VERSION" requires explicit package name at Errno.pm line 11.
ultrix.polarhome.com Global symbol "VERSION" requires explicit package name at Errno.pm line 11.
ultrix.polarhome.com Variable "$VERSION" is not imported at Errno.pm line 10.
ultrix.polarhome.com Variable "$VERSION" is not imported at Errno.pm line 11.
ultrix.polarhome.com Variable "$VERSION" is not imported at Errno.pm line 11.
ultrix.polarhome.com Variable "%EXPORT_TAGS" is not imported at Errno.pm line 32.
ultrix.polarhome.com Variable "@EXPORT_OK" is not imported at Errno.pm line 14.
ultrix.polarhome.com Variable "@ISA" is not imported at Errno.pm line 12.
unixware.polarhome.com
unixware.polarhome.com SCO UnixWare 7.1.4
unixware.polarhome.com Welcome to unixware ...member of polarhome.com realm
unixware.polarhome.com Works on unixware.polarhome.com unixware.polarhome.com Works on unixware.polarhome.com
dragonfly.polarhome.com Works on dragonfly.polarhome.com
centos.polarhome.com Works on centos.polarhome.com
miros.polarhome.com Works on miros.polarhome.com
hurd.polarhome.com Works on hurd.polarhome.com
minix.polarhome.com Works on minix.polarhome.com

View file

@ -1,5 +1,6 @@
### Test -k ### Test -k
parallel: Warning: Only enough filehandles to run 19 jobs in parallel. Raising ulimit -n may help. parallel: Warning: Only enough file handles to run 19 jobs in parallel.
Raising ulimit -n or /etc/security/limits.conf may help.
begin begin
1 1
2 2
@ -17,6 +18,7 @@ begin
14 14
15 15
16 16
parallel: Warning: No more file handles. Raising ulimit -n or /etc/security/limits.conf may help.
17 17
18 18
19 19