Garder ouvert un script shell

Je cherche à ce qu’un script shell reste ouvert comme un démon au lieu de rendre la main après s’être exécuté. Comme un démon, je veux qu’il réagisse en se terminant de lui-même quand il reçoit une demande de SIGTERM.

Ma première approche c’est une boucle infinie avec un sleep.

trap 'quit' SIGTERM SIGKILL

function quit() {
  exit 1
}

while true; do
  sleep 10
done 

Le trap n’interrompt pas le sleep. J’ai mis 10 secondes pour garder une réactivité raisonnable à l’extinction.

Même si un réveil toutes les 10 secondes est probablement insignifiant, quelque chose en moi est quand même gêné et aurait aimé mettre plusieurs heures ici.

Je vois sur le web pas mal d’exemples avec un sleep 1, qui m’interroge encore plus. Quel est le coût réel de ce sleep 10 dans une boucle infinie ?

Certains ont élaboré des solutions pour rendre le sleep interruptible en l’envoyant en tâche de fond :

PID=

trap '[[ $PID ]] && kill "$PID"' SIGTERM SIGKILL

while true; do
  sleep 100000 & pid=$!
  wait
done

Je vois aussi, et ça m’a l’air simple & smart, des scripts utiliser des readline plutôt que des sleep. Les readline ont la bonne idée d’être interruptibles et de durée infinie tant qu’on n’envoie rien sur stdin.

trap 'quit' SIGTERM SIGKILL

function quit() {
  exit 1
}

read

Dites, les amateurs de shell, quelle est la méthode recommandée pour garder un script ouvert en tâche de fond ? Est-ce qu’il y a une réelle différence entre ces méthodes ou est-ce juste une question de style ?