mirror of
https://git.savannah.gnu.org/git/parallel.git
synced 2024-11-24 15:07:55 +00:00
Fixed bug #59146: Support --termseq for remote jobs.
This commit is contained in:
parent
69cca79c3b
commit
95eb81b901
14
src/parallel
14
src/parallel
|
@ -9063,6 +9063,7 @@ sub sshlogin_wrap($) {
|
||||||
::spacefree(0,'$shell = "'.($ENV{'PARALLEL_SHELL'} || '$ENV{SHELL}').'";'.
|
::spacefree(0,'$shell = "'.($ENV{'PARALLEL_SHELL'} || '$ENV{SHELL}').'";'.
|
||||||
'$tmpdir = "'.::perl_quote_scalar($ENV{'TMPDIR'}).'";'.
|
'$tmpdir = "'.::perl_quote_scalar($ENV{'TMPDIR'}).'";'.
|
||||||
'$nice = '.$opt::nice.';'.
|
'$nice = '.$opt::nice.';'.
|
||||||
|
'$termseq = "'.$opt::termseq.'";'.
|
||||||
q{
|
q{
|
||||||
# Set $PARALLEL_TMP to a non-existent file name in $TMPDIR
|
# Set $PARALLEL_TMP to a non-existent file name in $TMPDIR
|
||||||
do {
|
do {
|
||||||
|
@ -9084,8 +9085,17 @@ sub sshlogin_wrap($) {
|
||||||
$s = $s < 1 ? 0.001 + $s * 1.03 : $s;
|
$s = $s < 1 ? 0.001 + $s * 1.03 : $s;
|
||||||
select(undef, undef, undef, $s);
|
select(undef, undef, undef, $s);
|
||||||
} until ($done || getppid == 1);
|
} until ($done || getppid == 1);
|
||||||
# Kill HUP the process group if job not done
|
if(not $done) {
|
||||||
kill(SIGHUP, -${pid}) unless $done;
|
# Kill as per --termseq
|
||||||
|
my @term_seq = split/,/,$termseq;
|
||||||
|
if(not @term_seq) {
|
||||||
|
@term_seq = ("TERM",200,"TERM",100,"TERM",50,"KILL",25);
|
||||||
|
}
|
||||||
|
while(@term_seq && kill(0,-$pid)) {
|
||||||
|
kill(shift @term_seq, -$pid);
|
||||||
|
select(undef, undef, undef, (shift @term_seq)/1000);
|
||||||
|
}
|
||||||
|
}
|
||||||
wait;
|
wait;
|
||||||
exit ($?&127 ? 128+($?&127) : 1+$?>>8)
|
exit ($?&127 ? 128+($?&127) : 1+$?>>8)
|
||||||
});
|
});
|
||||||
|
|
|
@ -6,6 +6,40 @@ export SSHLOGIN1=parallel@lo
|
||||||
export SSHLOGIN2=csh@lo
|
export SSHLOGIN2=csh@lo
|
||||||
mkdir -p tmp
|
mkdir -p tmp
|
||||||
|
|
||||||
|
par_termseq_remote() {
|
||||||
|
echo '### bug #59146: Support --termseq for remote jobs'
|
||||||
|
doit() {
|
||||||
|
# setup signal handlers for all signals
|
||||||
|
exec perl -e '
|
||||||
|
$file = shift;
|
||||||
|
for $i (qw(
|
||||||
|
HUP INT QUIT ILL TRAP
|
||||||
|
ABRT BUS FPE KILL USR1
|
||||||
|
SEGV USR2 PIPE ALRM TERM
|
||||||
|
STKFLT CHLD CONT STOP TSTP
|
||||||
|
TTIN TTOU URG XCPU XFSZ
|
||||||
|
VTALRM PROF WINCH IO PWR
|
||||||
|
SYS RTMIN RTMIN+1 RTMIN+2 RTMIN+3
|
||||||
|
RTMIN+4 RTMIN+5 RTMIN+6 RTMIN+7 RTMIN+8
|
||||||
|
RTMIN+9 RTMIN+10 RTMIN+11 RTMIN+12 RTMIN+13
|
||||||
|
RTMIN+14 RTMIN+15 RTMAX-14 RTMAX-13 RTMAX-12
|
||||||
|
RTMAX-11 RTMAX-10 RTMAX-9 RTMAX-8 RTMAX-7
|
||||||
|
RTMAX-6 RTMAX-5 RTMAX-4 RTMAX-3 RTMAX-2
|
||||||
|
RTMAX-1 RTMAX
|
||||||
|
)) {
|
||||||
|
eval q[$SIG{].$i.q[}=sub{open(A,">>$file");print A "].$i.q[\n";};];
|
||||||
|
}
|
||||||
|
for(1..100) { sleep(1);}
|
||||||
|
' $file
|
||||||
|
}
|
||||||
|
file=/tmp/sig$$
|
||||||
|
. `which env_parallel.bash`
|
||||||
|
env_parallel -v --timeout 2 --termseq HUP,30,INT,30,QUIT,30,ILL,30,TRAP,30,ABRT,30,BUS,30,FPE,30,USR1,30,SEGV,30,USR2,30,PIPE,30,ALRM,30,TERM,30,STKFLT,30,CHLD,30,CONT,30,TSTP,30,TTIN,30,TTOU,30,URG,30,XCPU,30,XFSZ,30,VTALRM,30,PROF,30,WINCH,30,IO,30,PWR,30,SYS,30,RTMIN,30,RTMAX,30,KILL,9 -S $SSHLOGIN1 doit ::: 1
|
||||||
|
sleep 1
|
||||||
|
cat $file
|
||||||
|
ssh $SSHLOGIN1 rm $file
|
||||||
|
}
|
||||||
|
|
||||||
par_nonall_ssh() {
|
par_nonall_ssh() {
|
||||||
echo 'bug #59181: --ssh is not propagated to --nonall'
|
echo 'bug #59181: --ssh is not propagated to --nonall'
|
||||||
parallel --ssh 'echo OK | ssh' -S $SSHLOGIN1 --nonall cat
|
parallel --ssh 'echo OK | ssh' -S $SSHLOGIN1 --nonall cat
|
||||||
|
|
|
@ -34,6 +34,40 @@ par_rsync_3.2.3 bug59006
|
||||||
par_sshlogin_replacement ### show {sshlogin} and {host}
|
par_sshlogin_replacement ### show {sshlogin} and {host}
|
||||||
par_sshlogin_replacement parallel@lo and lo
|
par_sshlogin_replacement parallel@lo and lo
|
||||||
par_sshlogin_replacement /usr/bin/ssh parallel@lo and lo
|
par_sshlogin_replacement /usr/bin/ssh parallel@lo and lo
|
||||||
|
par_termseq_remote ### bug #59146: Support --termseq for remote jobs
|
||||||
|
par_termseq_remote parallel: Warning: This job was killed because it timed out:
|
||||||
|
par_termseq_remote parallel: Warning: doit 1
|
||||||
|
par_termseq_remote doit 1
|
||||||
|
par_termseq_remote HUP
|
||||||
|
par_termseq_remote INT
|
||||||
|
par_termseq_remote QUIT
|
||||||
|
par_termseq_remote ILL
|
||||||
|
par_termseq_remote TRAP
|
||||||
|
par_termseq_remote ABRT
|
||||||
|
par_termseq_remote BUS
|
||||||
|
par_termseq_remote FPE
|
||||||
|
par_termseq_remote USR1
|
||||||
|
par_termseq_remote SEGV
|
||||||
|
par_termseq_remote USR2
|
||||||
|
par_termseq_remote PIPE
|
||||||
|
par_termseq_remote ALRM
|
||||||
|
par_termseq_remote TERM
|
||||||
|
par_termseq_remote STKFLT
|
||||||
|
par_termseq_remote CHLD
|
||||||
|
par_termseq_remote CONT
|
||||||
|
par_termseq_remote TSTP
|
||||||
|
par_termseq_remote TTIN
|
||||||
|
par_termseq_remote TTOU
|
||||||
|
par_termseq_remote URG
|
||||||
|
par_termseq_remote XCPU
|
||||||
|
par_termseq_remote XFSZ
|
||||||
|
par_termseq_remote VTALRM
|
||||||
|
par_termseq_remote PROF
|
||||||
|
par_termseq_remote WINCH
|
||||||
|
par_termseq_remote IO
|
||||||
|
par_termseq_remote PWR
|
||||||
|
par_termseq_remote SYS
|
||||||
|
par_termseq_remote RTMIN
|
||||||
par_test_nonall ### Test --nonall
|
par_test_nonall ### Test --nonall
|
||||||
par_test_nonall /home/csh
|
par_test_nonall /home/csh
|
||||||
par_test_nonall /home/parallel
|
par_test_nonall /home/parallel
|
||||||
|
|
Loading…
Reference in a new issue