Heim >Backend-Entwicklung >C++ >Wie kann sichergestellt werden, dass jeweils nur eine Instanz einer C/C-Anwendung ausgeführt wird?

Wie kann sichergestellt werden, dass jeweils nur eine Instanz einer C/C-Anwendung ausgeführt wird?

Barbara Streisand
Barbara StreisandOriginal
2024-11-01 05:28:27484Durchsuche

How to Ensure Only One Instance of a C/C   Application Runs at a Time?

Einzelinstanzanwendungen mit C oder C erstellen

Um sicherzustellen, dass nur eine Instanz einer Anwendung gleichzeitig ausgeführt wird, müssen verschiedene Techniken berücksichtigt werden . Hier sind einige Optionen und ihre Vorteile:

Dateisperre:
Ein Ansatz ist die Dateisperre. Die Anwendung erstellt eine eindeutige Datei und erwirbt bei der Ausführung eine exklusive Sperre für diese Datei. Wenn eine andere Instanz auszuführen versucht, kann sie die Sperre nicht erhalten, was darauf hinweist, dass eine Instanz bereits ausgeführt wird.

Mutex:
Mutexe sind Synchronisationsobjekte, die mehrere Threads oder Prozesse zulassen um sicher und ohne Konflikte auf freigegebene Ressourcen zuzugreifen. In diesem Fall kann ein Mutex verwendet werden, um den Zugriff auf die laufende Anwendung zu steuern. Wenn die erste Instanz den Mutex erhält, werden alle nachfolgenden Instanzen blockiert, bis der Mutex freigegeben wird.

Unix-Domänen-Socket:
Erstellen und Binden eines Unix-Domänen-Sockets mit einem eindeutigen Namen ist eine andere Methode. Die erste Instanz der Anwendung stellt erfolgreich eine Bindung an den Socket her. Wenn eine andere Instanz versucht, sich an denselben Namen zu binden, schlägt sie fehl und kann eine Verbindung zum vorhandenen Socket herstellen, um mit der ersten Instanz zu kommunizieren.

Implementierungsbeispiel:

Hier eine Beispielimplementierung mit Dateisperre:

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

Dieser Ansatz stellt sicher, dass nur eine Instanz der Anwendung ausgeführt wird und hat den Vorteil, dass veraltete PID-Dateien verarbeitet werden können.

Das obige ist der detaillierte Inhalt vonWie kann sichergestellt werden, dass jeweils nur eine Instanz einer C/C-Anwendung ausgeführt wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn