Fixed bug #59146: Support --termseq for remote jobs.

This commit is contained in:
Ole Tange 2020-10-14 22:49:58 +02:00
parent 69cca79c3b
commit 95eb81b901
3 changed files with 80 additions and 2 deletions

View file

@ -9063,6 +9063,7 @@ sub sshlogin_wrap($) {
::spacefree(0,'$shell = "'.($ENV{'PARALLEL_SHELL'} || '$ENV{SHELL}').'";'.
'$tmpdir = "'.::perl_quote_scalar($ENV{'TMPDIR'}).'";'.
'$nice = '.$opt::nice.';'.
'$termseq = "'.$opt::termseq.'";'.
q{
# Set $PARALLEL_TMP to a non-existent file name in $TMPDIR
do {
@ -9084,8 +9085,17 @@ sub sshlogin_wrap($) {
$s = $s < 1 ? 0.001 + $s * 1.03 : $s;
select(undef, undef, undef, $s);
} until ($done || getppid == 1);
# Kill HUP the process group if job not done
kill(SIGHUP, -${pid}) unless $done;
if(not $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;
exit ($?&127 ? 128+($?&127) : 1+$?>>8)
});

View file

@ -6,6 +6,40 @@ export SSHLOGIN1=parallel@lo
export SSHLOGIN2=csh@lo
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() {
echo 'bug #59181: --ssh is not propagated to --nonall'
parallel --ssh 'echo OK | ssh' -S $SSHLOGIN1 --nonall cat

View file

@ -34,6 +34,40 @@ par_rsync_3.2.3 bug59006
par_sshlogin_replacement ### show {sshlogin} and {host}
par_sshlogin_replacement 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 /home/csh
par_test_nonall /home/parallel