Tente:
#!/bin/bash
_term() {
echo "Caught SIGTERM signal!"
kill -TERM "$child" 2>/dev/null
}
trap _term SIGTERM
echo "Doing some initial work...";
/bin/start/main/server --nodaemon &
child=$!
wait "$child"
Normalmente, bash
ignorará quaisquer sinais enquanto um processo filho estiver sendo executado. A inicialização do servidor com &
colocará em segundo plano no sistema de controle de tarefas do shell, com $!
mantendo o PID do servidor (a ser usado com wait
e kill
). Chamar wait
irá então esperar que o trabalho com o PID (o servidor) especificado termine, ou que quaisquer sinais sejam disparados .
Quando o shell recebe SIGTERM
(ou o servidor sai independentemente), a chamada wait
retornará (saindo com o código de saída do servidor ou com o número de sinal + 127 se um sinal foi recebido). Posteriormente, se o shell receber SIGTERM, ele chamará a função _term
especificada como o manipulador de traps SIGTERM antes de sair (no qual fazemos qualquer limpeza e propagamos manualmente o sinal para o processo do servidor usando kill
).