O que mais cedo eu posso enviar um sinal para um processo de fundo (armadilha)?

1

Eu tenho um script do qual eu corro um segundo script em um subshell. Qual é o mais rápido que pode enviar um sinal para o segundo script?

script1:

./script2 &
kill -SIGCONT $!

script2:

echo "~~ ENTRY"

trap 'SUSPEND=false' SIGCONT

SUSPEND=true
while $SUSPEND; do; sleep 1; done

echo "~~ EXIT"

Isso não funcionará, o terminal ficará pendurado no modo "suspenso". Meu palpite é que, como eu chamo kill imediatamente depois de executar o script2, a armadilha no script2 não tem tempo para ser analisada e, portanto, nada acontece - condição de corrida.

Então, qual é o mais rápido possível para enviar o sinal para o processo filho - certificando-se de que ele fique preso?

    
por Pithikos 27.08.2014 / 15:42

1 resposta

1

Você pode usar uma mensagem para um pipe nomeado como um sinal de que script2 está pronto para manipular o sinal.

script1:

mkfifo /tmp/pipe
./script2 &
read nothing < /tmp/pipe
kill -CONT $!

script2:

echo "~~ ENTRY"

trap 'SUSPEND=false' SIGCONT
echo ready > /tmp/pipe

SUSPEND=true
while $SUSPEND; do; sleep 1; done

echo "~~ EXIT"
    
por 29.08.2014 / 20:29