it-swarm.com.de

Wofür sind PID- und Sperrdateien?

Ich sehe oft, dass Programme PID- und Sperrdateien angeben. Und ich bin mir nicht ganz sicher, was sie tun.

Zum Beispiel beim Kompilieren von Nginx:

--pid-path=/var/run/nginx.pid \
--lock-path=/var/lock/nginx.lock \

Kann jemand etwas Licht ins Dunkel bringen?

80
Stann

pID-Dateien werden von einigen Programmen geschrieben, um ihre Prozess-ID beim Start aufzuzeichnen. Dies hat mehrere Zwecke:

  • Dies ist ein Signal an andere Prozesse und Benutzer des Systems, dass dieses bestimmte Programm ausgeführt oder zumindest erfolgreich gestartet wurde.
  • Es ermöglicht einem, ein Skript zu schreiben, das wirklich einfach zu überprüfen ist, ob es ausgeführt wird, und einen einfachen Befehl kill auszugeben, wenn man es beenden möchte.
  • Es ist eine kostengünstige Möglichkeit für ein Programm, festzustellen, ob eine zuvor ausgeführte Instanz davon nicht erfolgreich beendet wurde.

Das bloße Vorhandensein einer PID-Datei garantiert natürlich nicht, dass diese bestimmte Prozess-ID ausgeführt wird. Daher ist diese Methode nicht 100% narrensicher, aber in vielen Fällen "gut genug". Die Überprüfung, ob eine bestimmte PID in der Prozesstabelle vorhanden ist, ist unter UNIX-ähnlichen Betriebssystemen nicht vollständig portierbar, es sei denn, Sie möchten sich auf das Dienstprogramm ps verlassen, das möglicherweise nicht in allen Fällen aufgerufen werden muss (und ich glaube Einige UNIX-ähnliche Betriebssysteme implementieren ps ohnehin anders.

Sperrdateien werden von Programmen verwendet, um sicherzustellen, dass zwei (gut erzogene) separate Instanzen eines Programms, die möglicherweise gleichzeitig auf einem System ausgeführt werden, nicht gleichzeitig auf etwas anderes zugreifen. Bevor das Programm auf seine Ressource zugreift, prüft es, ob eine Sperrdatei vorhanden ist. Wenn die Sperrdatei vorhanden ist, wird entweder ein Fehler ausgegeben oder es wird darauf gewartet, dass sie nicht mehr angezeigt wird. Wenn es nicht vorhanden ist, erstellt das Programm, das die Ressource "erwerben" möchte, die Datei, und andere Instanzen, die später auftreten können, warten darauf, dass dieser Vorgang ausgeführt wird. Dies setzt natürlich voraus, dass das Programm, das die Sperre "erwirbt", sie tatsächlich freigibt und nicht vergisst, die Sperrdatei zu löschen.

Dies funktioniert, weil das Dateisystem unter allen UNIX-ähnlichen Betriebssystemen Serialisierung erzwingt, was bedeutet, dass zu einem bestimmten Zeitpunkt nur eine Änderung am Dateisystem tatsächlich erfolgt. So ähnlich wie Sperren mit Datenbanken und so.

90
LawrenceC

Diese Dateien werden häufig von Daemons verwendet, die nur einmal auf einem System ausgeführt werden sollten. Die PID-Datei enthält normalerweise die Prozess-ID des bereits gestarteten und laufenden Programms, falls vorhanden. Außerdem wird beim Start die Sperrdatei erstellt. Solange die Sperrdatei vorhanden ist, wird ohne Benutzereingriff keine weitere gestartet. Wenn die Sperrdatei vorhanden ist und die in der PID-Datei angegebene Prozess-ID nicht ausgeführt wird, wird davon ausgegangen, dass sich der Dämon in einem "toten" Zustand befindet. Dies bedeutet, dass er ausgeführt werden soll, aber wahrscheinlich nicht auf einen Absturz oder ein nicht ordnungsgemäßes Herunterfahren zurückzuführen ist . Dies kann für einige Programme ein spezielles Start-/Neustart-Szenario auslösen. Wenn Sie es ordnungsgemäß herunterfahren, wird die Sperrdatei entfernt.

14
Caleb

Eine PID-Datei enthält die Prozess-ID eines laufenden Prozesses. Dies hat verschiedene Verwendungszwecke; Sie können es lesen und überprüfen, ob der Prozess noch ausgeführt wird, und entsprechende Maßnahmen ergreifen oder es lesen und den Prozess beenden.

Eine Sperrdatei ist höchstwahrscheinlich anwendungsspezifisch. Sperrdateien werden verwendet, um anzuzeigen, dass eine Ressource verwendet wird und dass der Zugriffsprozess warten muss, bis die Ressource freigegeben ist, bevor er fortfährt.

8
user591