Les démons en C – existe-t-il un moyen de les mettre en œuvre?

J’ai une question générale sur les démons en C, à laquelle je n’ai pas encore trouvé de réponse.

Existe-t-il un moyen d’implémenter le contrôle d’un processus démon, comme une convention ou une norme?

–Rest une autre explication–

J’ai vu plusieurs documents enseigner les bases comment créer un démon en C. Forking, fermer les descripteurs de fichiers, changer de racine, etc … pas de problème. Et ils s’arrêtent tous lorsque le processus entre dans une boucle sans fin (lorsque le processus démon est créé, pour ainsi dire). Mais ce n’est que la moitié du temps nécessaire pour coder un démon; vous devez le contrôler en quelque sorte . Je peux le faire fonctionner de différentes façons, mais j’ai l’impression qu’il y a beaucoup plus à faire.

Pour cela (vérifier si un processus est déjà en cours d’exécution ou pour arrêter un processus en cours d’exécution, ou …), j’ai vu différentes approches (sockets UNIX, verrous de fichiers, fichiers pid, …) avec leurs avantages et inconvénients. Mais cela me semblait être des opinions ou des saveurs personnelles; “Pourquoi tu ne viens pas …?” ou “je l’ai fait de cette façon, ça a fonctionné pour moi”. Et je ne sais pas si c’est un signe de liberté ou non.

Je veux dire, si vous regardez sshd, httpd, syslogd, etc., ils peuvent tous être contrôlés via init-scripts ou la commande de service (start | stop | status). Cela ressemble à une norme. Mais est-ce juste une convention lâche que beaucoup de gens essaient de suivre ou existe-t-il une sorte de «cadre» dans la mer profonde des fonctions C? Devez-vous le faire fonctionner en quelque sorte – par exemple, faites que votre programme réponde à un argument “stop” et terminez le processus démon en quelque sorte ? Ou existe-t-il une sorte de norme, convention, UNIX-way, meilleures pratiques … que l’on devrait suivre pour écrire “bon code propre” et qui s’intègre bien dans la plupart des environnements?

Ma question principale est la suivante: y a-t-il un moyen de le faire?

Et si oui, où puis-je trouver plus d’informations? Je suppose qu’il y a plus à faire que de commencer et d’arrêter.

Il n’y a pas de standard, mais il y a un standard de facto , comme vous l’avez déjà remarqué.

Je vous suggère de prendre l’un de ces exemples, tel qu’Apache, et d’examiner ce que fait apachectl. Vous constaterez qu’il envoie des signaux au démon, en fonction de la connaissance du PID, qu’il lit dans un fichier.

Dans le cas d’Apache, les signaux ont du sens, car vous ne voulez pas qu’une sorte de requête HTTP puisse arrêter le serveur. Dans le cas d’un SGBD, vous souhaiterez peut-être répondre aux commandes entrantes pour arrêter le serveur, à condition de vous authentifier et d’autoriser d’abord.

Vous pouvez utiliser des signaux ou le démon peut créer un socket unix (avec les permissions appropriées) et écouter les données. Cela dépend du contrôle que vous devez mettre en œuvre sur votre programme.

Rappelez-vous que pour les choses à faible trafic, il peut être pratique d’utiliser xinetd et de le laisser bifurquer et gérer la connexion, et de répondre simplement à la requête.