Eu escrevi um programa de teste simples que funciona bem.
#/bin/bash
run_ajob() {
# sometime the job is short to send a signal to parent
if [ "$job" = "short" ]; then # this is a pseudo code different kinds of job, the elaborate code is much longer
kill -s SIGUSR1 $parent
fi
}
# parent process for job control
shortjob=F
export parent=$$
echo $shortjob in parent $parent
trap "{ echo 'got mouse'; shortjob=T; }" SIGUSR1
run_ajob&
sleep 5 # add this line to prevent the parent process from terminate too soon
echo $shortjob
# output from the program
F in parent 22755
got mouse
T
No entanto, esse mesmo padrão de código, quando usado em meu pipeline de produção, causou a morte do processo pai. Estranho o suficiente, inicialmente por vários meses, os grandes scripts de shell funcionaram bem, mas de repente ele começou a matar o processo pai. Não tenho certeza de qual alteração causa esse comportamento inesperado; Fiz algumas pequenas modificações no script grande em outro lugar não relacionado. Esse script é usado em um ambiente de cluster de slurm. Eu sei que mudou algo sobre o slurm. Passar dia e noite inteiros não encontrou solução para esse problema simples. Eu devo ter ficado em algum lugar que alguém possa apontar.
Tags bash