parallel: --tty allows for more programs accessing /dev/tty in parallel.

This commit is contained in:
Ole Tange 2018-05-21 10:31:57 +02:00
parent 94ac9fd72c
commit f2b403b7fb
4 changed files with 29 additions and 17 deletions

View file

@ -210,6 +210,11 @@ Quote of the month:
<<>>
New in this release:
* --tty allows for more programs accessing /dev/tty in parallel. Some programs require tty access without using it.
* env_parallel --session will record names in current environment in $PARALLEL_IGNORED_NAMES and exit. It is only used with env_parallel, and can work like --record-env but in a single session.
https://comquest.in/training
https://bash-prompt.net/guides/parallell-bash/
https://blog.uta.edu/xus/2017/09/29/an-easy-way-to-run-parallel-jobs-on-stampede2/

View file

@ -27,7 +27,20 @@ B<env_parallel> is 100 ms slower at startup than pure GNU
B<parallel>, and takes up to 30% longer to start a job (typically 15 ms).
Due to the problem with environment space (see below) the recommended
usage is:
usage is either:
# Do --record-env into $PARALLEL_IGNORED_NAMES
env_parallel --session
# Define whatever you want to use
alias myalias=echo
myvar=it
myfunc() { myalias $1 $myvar works.; }
# env_parallel will not export names in $PARALLEL_IGNORED_NAMES
env_parallel -S localhost myfunc ::: Yay,
Or:
# Record the "clean" environment (this only needs to be run once)
env_parallel --record-env
@ -42,7 +55,7 @@ usage is:
# Use --env _ to only transfer the names not in the "empty" environment
env_parallel --env _ -S localhost myfunc ::: Yay,
In B<csh>:
In B<csh> B<--session> is not supported:
# Record the "clean" environment (this only needs to be run once)
env_parallel --record-env

View file

@ -2449,7 +2449,6 @@ sub __RUNNING_THE_JOBS_AND_PRINTING_PROGRESS__ {}
# $Global::host{$sshlogin} = Pointer to SSHLogin-object
# $Global::total_running = total number of running jobs
# $Global::total_started = total jobs started
# $Global::tty_taken = is the tty in use by a running job?
# $Global::max_procs_file = filename if --jobs is given a filename
# $Global::JobQueue = JobQueue object for the queue of jobs
# $Global::timeoutq = queue of times where jobs timeout
@ -2471,7 +2470,6 @@ sub init_run_jobs {
# Returns: N/A
$Global::total_running = 0;
$Global::total_started = 0;
$Global::tty_taken = 0;
$SIG{USR1} = \&list_running_jobs;
$SIG{USR2} = \&toggle_progress;
if(@opt::basefile) { setup_basefile(); }
@ -3927,7 +3925,6 @@ sub reaper {
# Uses:
# %Global::sshmaster
# %Global::running
# $Global::tty_taken
# $opt::timeout
# $Global::timeoutq
# $opt::halt
@ -3969,10 +3966,6 @@ sub reaper {
debug("run", "seq ",$job->seq()," died (", $job->exitstatus(), ")");
$job->set_endtime(::now());
if($stiff == $Global::tty_taken) {
# The process that died had the tty => release it
$Global::tty_taken = 0;
}
my $sshlogin = $job->sshlogin();
$sshlogin->dec_jobs_running();
if($job->should_be_retried()) {
@ -8588,7 +8581,7 @@ sub start {
}
$job->set_fh(0,"w",$stdin_fh);
if($opt::tee) { $job->set_virgin(0); }
} elsif ($opt::tty and not $Global::tty_taken and -c "/dev/tty" and
} elsif ($opt::tty and -c "/dev/tty" and
open(my $devtty_fh, "<", "/dev/tty")) {
# Give /dev/tty to the command if no one else is using it
# The eval is needed to catch exception from open3
@ -8605,7 +8598,6 @@ sub start {
|| ::die_bug("open3-/dev/tty");
1;
};
$Global::tty_taken = $pid;
close $devtty_fh;
$job->set_virgin(0);
} else {

View file

@ -2041,6 +2041,8 @@ Record names in current environment in B<$PARALLEL_IGNORED_NAMES> and
exit. Only used with B<env_parallel>. Aliases, functions, and
variables with names in B<$PARALLEL_IGNORED_NAMES> will not be copied.
Only supported in B<Ash, Bash, Dash, Ksh, Sh, and Zsh>.
See also B<--env>, B<--record-env>.
@ -2328,13 +2330,13 @@ Silent. The job to be run will not be printed. This is the default.
Can be reversed with B<-v>.
=item B<--tty>
=item B<--tty> (alpha testing)
Open terminal tty. If GNU B<parallel> is used for starting an
interactive program then this option may be needed. It will start only
one job at a time (i.e. B<-j1>), not buffer the output (i.e. B<-u>),
and it will open a tty for the job. When the job is done, the next job
will get the tty.
Open terminal tty. If GNU B<parallel> is used for starting a program
that accesses the tty (such as an interactive program) then this
option may be needed. It will default to starting only one job at a
time (i.e. B<-j1>), not buffer the output (i.e. B<-u>), and it will
open a tty for the job.
You can of course override B<-j1> and B<-u>.