einführen Normalerweise muss ein Hintergrundserverprogramm genau einen Prozess haben. Wie kann man also einen einzelnen Prozess einrichten? Dieses Beispiel verwendet die Flock-Funktion, um die PID-Datei /var/run/myserver.pid zu sperren.
Hintergrund-Serviceprogramm Einzelprozesssteuerung Ohne ins Detail zu gehen, schauen wir uns den Code direkt an #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <errno.h> #include <fcntl.h> #define PID_BUF_LEN (20) #define RUN_PID_FILE "/var/run/myserver.pid" //Einzelinstanz des Serviceprozesses wird ausgeführt //Rückgabewert: 1 – wird ausgeführt, 0 – wird nicht ausgeführt, -1 – Fehler int server_is_running() { int fd = öffnen(RUN_PID_FILE, O_WRONLY|O_CREAT); wenn(fd < 0) { printf("öffne PID-Fehler ausführen (%d)! %s\n", errno, RUN_PID_FILE); Rückgabe -1; } // Sperre // LOCK_SH richtet eine gemeinsame Sperre ein. Mehrere Prozesse können gleichzeitig eine Sperre für die gleiche Datei gemeinsam nutzen. // LOCK_EX richtet eine gegenseitige Ausschlusssperre ein. Für eine Datei kann jeweils nur eine exklusive Sperre gelten. wenn (flock(fd, LOCK_EX|LOCK_NB) == -1) { //Wenn die Sperre nicht hinzugefügt werden kann, läuft der Dienst und wurde gesperrt printf("Server läuft jetzt! errno=%d\n", errno); schließen(fd); Rückgabe 1; } // Das Sperren war erfolgreich, was beweist, dass der Dienst nicht ausgeführt wird. // Schließen oder entsperren Sie den Datei-Handle nicht. // Der Prozess wird beendet und automatisch entsperrt. printf("myserver is not running! beginne zu laufen..... pid=%ld\n", (long)getpid()); char pid_buf[PID_BUF_LEN] = {0}; snprintf(pid_buf, Größe von(pid_buf)-1, "%ld\n", (lang)getpid()); // Schreibe die Prozess-PID in die Datei /var/run/myserver.pid write(fd, pid_buf, strlen(pid_buf)); gebe 0 zurück; } int Haupt(void) { //Erkennung einzelner laufender Instanzen verarbeiten, wenn (0 != server_is_running()) { printf("myserver-Prozess läuft!!!!! Aktueller Prozess wird beendet !\n"); Rückgabe -1; } während(1) { printf("meinServer macht ... \n"); schlaf(2); } gebe 0 zurück; } Ergebnisse der Operation Führen Sie das Programm aus und Sie können sehen, dass die Prozess-PID 6965 ist [root@lincoding-Einzelprozess]# ./meinServer Server läuft nicht! Starten Sie den Server.....pid=6965 mein Server macht … mein Server macht … mein Server macht … mein Server macht … mein Server macht … mein Server macht … mein Server macht … mein Server macht … /var/run/myserver.pid zeichnet auch die PID-Nummer dieses Prozesses auf. ps auxf | grep myserver zeigt, dass der Prozess myserver ausgeführt wurde. [root@lincoding Einzelprozess]# cat /var/run/myserver.pid 6965 [root@lincoding Einzelprozess] [root@lincoding einzelner Prozess]# ps auxf | grep meinServer root 6965 0,0 0,0 3924 460 Punkte/0 S+ 00:32 0:00 | \_ ./meinserver root 9976 0,0 0,0 103256 856 Punkte/1 S+ 00:35 0:00 \_ grep meinserver [root@lincoding Einzelprozess] Wenn Sie zu diesem Zeitpunkt das MyServer-Programm erneut ausführen, wird ein Fehler gemeldet und beendet, da festgestellt wird, dass das MyServer-Programm bereits ausgeführt wird und kein anderer Prozess gestartet werden kann. Dadurch wird eine Einzelprozesssteuerung des Hintergrunddienstprogramms erreicht. [root@lincoding-Einzelprozess]# ./meinServer Server läuft jetzt! errno=11 Der MyServer-Prozess läuft!!!!! Der aktuelle Prozess wird beendet! Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird. Das könnte Sie auch interessieren:
|
<<: MySQL Community Server 5.6 Installations- und Konfigurations-Tutorial unter Windows 8
>>: So begrenzen Sie den Wertebereich von Objektschlüsseln in TypeScript
Die Verwendung der vue3 Teleport-Sofortbewegungsf...
1. Die Rolle des Index Im Allgemeinen entspricht ...
Lange Zeit wurde die Entwicklung von Websites dad...
Der Unterschied zwischen := und = = Nur beim Setz...
Im vorherigen Artikel habe ich die Grundkenntniss...
Problembeschreibung Als ich heute den Seitenstil ...
In diesem Artikelbeispiel wird der spezifische Co...
Inhaltsverzeichnis Überblick 0. Grundlagen von Ja...
Manchmal müssen Sie auf einige statische Ressourc...
Inhaltsverzeichnis Konzept-Einführung Logische Re...
Adaptives Layout wird in praktischen Anwendungen i...
1. Stoppen Sie zuerst den Datenbankserver Dienst ...
In diesem Artikel wird der spezifische Code des j...
Vorwort: Docker ist eine Open-Source-Anwendungsco...
<br />Wenn wir über Navigation sprechen, geh...