Établir une application à instance unique, permettant à une seule instance de s'exécuter simultanément, est un aspect crucial du développement logiciel. Pour y parvenir, plusieurs méthodes sont disponibles, notamment les verrous de fichiers, les mutex et des techniques plus avancées.
Utilisation des verrous de fichiers
Une approche courante consiste à utiliser des verrous de fichiers. Dans l'extrait de code fourni :
<code class="c">#include <sys/file.h> #include <errno.h> // ... int pid_file = open("/var/run/whatever.pid", O_CREAT | O_RDWR, 0666); int rc = flock(pid_file, LOCK_EX | LOCK_NB); // ...</code>
Un descripteur de fichier, pid_file, est créé et verrouillé à l'aide de la fonction flock(), empêchant d'autres instances d'y accéder. Si le verrouillage réussit (c'est-à-dire rc == 0), cela indique que l'application actuelle est la première instance, lui permettant de continuer.
Méthodes plus avancées
Cependant, le verrouillage des fichiers présente des limites, telles que le risque de fichiers PID périmés. Pour surmonter ce problème, des techniques plus avancées peuvent être utilisées :
Sockets de domaine Unix
En créant et en liant un socket de domaine Unix à l'aide d'un nom prédéfini, l'application peut vérifier si une autre instance est déjà en cours d'exécution. La liaison ne réussira que pour la première instance, les instances suivantes rencontrant une erreur. Cette approche fournit un moyen fiable de déterminer le caractère unique d'une instance.
Autres considérations
Il convient de noter que la sélection de la méthode appropriée dépend de facteurs tels que la plate-forme, le comportement souhaité et conception globale de l’application. Dans certains cas, la combinaison de plusieurs techniques peut être nécessaire pour obtenir des résultats optimaux.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!