O comando trap
funciona somente enquanto o script está sendo executado.
A maneira como isso é feito normalmente é que, quando o daemon é forjado, ele grava seu PID em um arquivo. O script de inicialização usa esse arquivo para determinar qual processo deve ser eliminado ou chama seu script de ativação para eliminar o processo.
Para a primeira instância:
launcher.sh:
/path/to/daemon.sh &
echo "$!" > /var/run/xyz.pid
Uma versão simples e um pouco ingênua de /etc/init.d/xyz
:
# ... pull in functions or sysconfig files ...
start() {
# ... do whatever is needed to set things up to start ...
/path/to/launcher.sh
}
stop() {
# ... do whatever is needed to set things up to stop ...
kill 'cat /var/run/xyz.pid'
}
# ... other functions ...
Um script de inicialização não-ingênuo dependerá de qual versão do Linux você está executando; Eu sugeriria ver outros exemplos em /etc/init.d
para ver como eles fazem isso.