Por que o processo com a armadilha terminou em vez de receber SIGUSR1 do processo filho?

0

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.

    
por Kemin Zhou 27.11.2018 / 05:39

0 respostas

Tags