Programme C conçu pour se redémarrer dans Solaris

Mon programme C s’exécute sous Solaris et doit redémarrer lorsque certaines conditions surviennent, par exemple recevoir un signal. Maintenant, je considère utiliser les fonctions de famille exec pour implémenter ces fonctionnalités, et il y a 3 problèmes:

  1. Je sais que les descripteurs de fichiers doivent être fermés avant d’être exécutés, mais le programme utilise des bibliothèques tierces, et ces bibliothèques ouvrent également des fichiers, alors comment puis-je fermer ces descripteurs de fichiers?
  2. À l’exception des descripteurs de fichiers, y a-t-il des ressources système à libérer?
  3. À part les fonctions de la famille exec, existe-t-il d’autres méthodes pour implémenter cette fonction?

La spécification POSIX pour la famille de fonctions exec vous indique exactement ce dont vous devez vous soucier. Lisez attentivement la section DESCRIPTION et voyez si quelque chose vous importe (p. Ex. Disposition du signal). Je ne crois pas que des ressources autres que des descripteurs de fichiers doivent être libérées.

Il n’y a aucun moyen de fermer tous les descripteurs de fichiers – ni de définir leur indicateur de fermeture sur exécution – que de savoir ce qu’ils sont ou de les parcourir en boucle. Voir (par exemple) cette réponse .

Je suis d’accord avec l’autre réponse selon laquelle une meilleure idée est d’avoir un processus ou un script “d’observation” qui relance le programme principal s’il se termine.

[mettre à jour]

Bien qu’il n’existe aucun moyen standard (POSIX) d’énumérer et / ou de fermer tous les descripteurs de fichiers ouverts, il existe une interface spécifique à Solaris. (C’était une nouvelle pour moi.) Voir le commentaire d’alanc ci-dessous.

J’aurais 2 programmes … l’un est un lanceur du second. Le lanceur attend la valeur de retour du second programme et, en fonction de cette valeur, décide de le relancer ou non.