shell script para processos de desova, encerrar crianças em SIGTERM
-
13-09-2019 - |
Pergunta
Eu quero escrever um script shell que gera vários processos de longa execução em segundo plano, em seguida, trava ao redor. Ao receber SIGTERM, quero que todos os subprocessos para terminar bem.
Basicamente, eu quero um "processo mestre".
Aqui está o que eu tenho até agora:
#!/bin/sh
sleep 600 &
PID1="$!"
sleep 600 &
PID2="$!"
# supposedly this should kill the child processes on SIGTERM.
trap "kill $PID1 $PID2" SIGTERM
wait
O script acima falha com trap: 10: SIGTERM: bad trap
.
Edit: eu estou usando o Ubuntu 9.04
Solução 2
resposta de Joe me colocou no caminho certo. Eu também descobri que deve prender mais sinais para cobrir minhas bases.
script procura finais como esta:
#!/bin/sh
sleep 600 &
PID1="$!"
sleep 600 &
PID2="$!"
trap "kill $PID1 $PID2" exit INT TERM
wait
Outras dicas
Eu suspeito que o seu bin / / sh não é um Bash (embora você marcou a questão como 'Bash').
A partir da mensagem que eu acho que é um traço. Verifique seu manual ou apenas corrigir o seu shebang se você precisa escrever código Bash.
Este script parece correto e funciona para mim como esperado.
Como você enviar o sinal SIGTERM para o "processo de mestre"?
Talvez você deve executar kill -l
para verificar quais os sinais são suportados.
Como a mensagem de erro sugere que você enviar o sinal de "10", que o seu sistema não parecem reconhecer.
E da próxima vez que você deve adicionar o sistema operacional, a versão do shell, kernel, ... para tal pergunta ??p>