Création d'applications à instance unique avec C ou C
Pour garantir qu'une seule instance d'une application s'exécute simultanément, il existe différentes techniques à considérer . Voici quelques options et leurs avantages :
Verrouillage de fichiers :
Une approche consiste à utiliser le verrouillage de fichiers. Un fichier unique est créé par l'application, et lors de son exécution, elle acquiert un verrou exclusif sur ce fichier. Si une autre instance tente de s'exécuter, elle ne parviendra pas à acquérir le verrou, indiquant qu'une instance est déjà en cours d'exécution.
Mutex :
Les mutex sont des objets de synchronisation qui autorisent plusieurs threads ou processus. pour accéder en toute sécurité aux ressources partagées sans conflits. Dans ce cas, un mutex peut être utilisé pour contrôler l'accès à l'application en cours d'exécution. Lorsque la première instance acquiert le mutex, toutes les instances suivantes seront bloquées jusqu'à ce que le mutex soit libéré.
Socket de domaine Unix :
Création et liaison d'un socket de domaine Unix avec un nom unique est une autre méthode. La première instance de l'application se lie avec succès au socket. Lorsqu'une autre instance tente de se lier au même nom, elle échoue et peut se connecter au socket existant pour communiquer avec la première instance.
Exemple d'implémentation :
Voici un exemple d'implémentation utilisant le verrouillage de fichiers :
<code class="c">#include <sys/file.h> #include <errno.h> int main() { int pid_file = open("/var/run/my_app.pid", O_CREAT | O_RDWR, 0666); int rc = flock(pid_file, LOCK_EX | LOCK_NB); if (rc) { if (EWOULDBLOCK == errno) { // Another instance is running return 1; } } else { // This is the first instance } // Perform application logic return 0; }</code>
Cette approche garantit qu'une seule instance de l'application est en cours d'exécution et présente l'avantage de pouvoir gérer les fichiers obsolètes. fichiers pid.
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!