2 votes

Comment démoniser un shell-script sous FreeBSD (et macOS)

La façon dont je démarre normalement un script shell de longue durée est la suivante

% (nohup ./script.sh </dev/null >script.log 2>&1 & )

Les redirections se ferment stdin et rouvrir stdout y stderr ; le nohup empêche HUP d'atteindre le processus lorsque le processus propriétaire quitte (je me rends compte que l'option 2>&1 est quelque peu redondant, puisque le nohup fait quelque chose comme ça de toute façon) ; et l'arrière-plan à l'intérieur de la sous coquille est la double fourche ce qui signifie que le ./script.sh a quitté le processus alors qu'il était encore en cours d'exécution, il acquiert donc le processus init comme parent.

Ce n'est pas complètement Cependant, lorsque je quitte le shell à partir duquel je l'ai invoqué (en général, bien sûr, je le fais sur une machine distante), il ne se termine pas proprement. Je peux faire ^C pour quitter, et c'est OK - le processus se poursuit en arrière-plan comme prévu. Cependant, je ne parviens pas à comprendre ce qui se passe ou ne se passe pas et qui nécessite l'utilisation de l'option de sortie. ^C et ça m'ennuie.

Les actions susmentionnées semblent cocher la plupart des cases de la stratégie de l'UE. FAQ unix (question 1.7), sauf que je ne fais rien pour détacher ce processus d'un terminal de contrôle, ou pour en faire un chef de session. L'appel setsid(2) existe sous FreeBSD, mais pas la commande setsid et, pour autant que je sache, il n'existe pas de substitut évident à cette commande. La même chose est vraie sur macOS, bien sûr.

Donc, les questions sont :

  • Y a-t-il un appelant de nom différent de setsid sur cette plateforme, que j'ai manqué ?
  • Que se passe-t-il, précisément, lorsque je quitte le shell appelant, que je tue avec la commande ^C ? Est-ce que cela pourrait me piquer ?

Questions connexes (par exemple 1 , 2 ) soit répondre à une question légèrement différente, soit supposer la présence de la setsid commandement.

(Cette question m'ennuie depuis des années, mais comme ce que je fais ici ne fonctionne pas, je n'ai jamais eu l'occasion de faire des recherches, de rester bloqué et de poser la question).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X