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:
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.