Eu encontrei o seguinte para trabalhar:
[function definitions]
process_args
function command_loop {
trap handle_term SIGTERM
while true; do
read line <controller_fifo && do_command $line &
wait
done
}
if [ "$BECOME_DAEMON" == "1" ]; then
command_loop &> /dev/null &
disown
else
command_loop
fi
Note que este método manipula o sinal SIGTERM normalmente em ambos os casos (daemon ou no daemon), enquanto o loop de leitura original que eu publiquei não trataria um sinal (o manipulador de sinal não seria chamado até depois de outra linha de leitura). / p>