Wofür sind PID- und Sperrdateien?


75

Ich sehe oft, dass Programme pid- und lock-Dateien 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 auf dieses werfen?

Antworten:


86

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

  • Dies ist ein Signal für andere Prozesse und Benutzer des Systems, dass das betreffende Programm ausgeführt wird oder zumindest erfolgreich gestartet wurde.
  • Es erlaubt einem, ein Skript zu schreiben, das sehr einfach zu überprüfen ist, ob es ausgeführt wird, und einen einfachen killBefehl auszugeben, wenn man es beenden möchte.
  • Ein Programm kann auf kostengünstige Weise feststellen, 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 übertragbar, es sei denn, Sie möchten sich auf das psDienstprogramm verlassen, dessen Aufruf möglicherweise nicht in allen Fällen erwünscht ist (und ich glaube, dass einige UNIX-ähnliche Betriebssysteme vorhanden sind psanders implementieren ).

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. Die Idee ist, bevor das Programm auf seine Ressource zugreift, das Vorhandensein einer Sperrdatei zu überprüfen und wenn die Sperrdatei vorhanden ist, entweder einen Fehler auszugeben oder darauf zu warten, dass sie verschwindet. Wenn es nicht vorhanden ist, erstellt das Programm, das die Ressource "erwerben" möchte, die Datei. Andere Instanzen, die später auftreten können, warten darauf, dass dieser Vorgang abgeschlossen 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 die Serialisierung erzwingt , was bedeutet, dass zu einem bestimmten Zeitpunkt nur eine Änderung am Dateisystem vorgenommen wird. Art wie Schlösser mit Datenbanken und so.


1
Dies ist korrekt, es sei denn, die Sperrdatei wird manuell gelöscht. VMWare Player weist dieses Verhalten auf. Wenn beispielsweise VMWare Player abstürzt, müssen Sie eine .lckDatei im Verzeichnis der VM löschen. Andernfalls werden Sie beim Versuch, sie zu starten, darauf hingewiesen, dass sie verwendet wird.
LawrenceC

1
Was ist mit Windows? Wie geht es mit .lock-Dateien um? Immerhin ist es nicht wie Unix.
SarahofGaia

2
Ich glaube nicht, dass Windows-Programme so funktionieren. Die einzigen Programme mit diesem Verhalten, die ich gesehen habe, sind Ports von Unix / Linux
HaMster

2
LawrenceC, Re " Wenn es nicht existiert, erstellt das Programm, das die Ressource" erwerben "möchte, die Datei "; Es gibt jedoch geeignete Funktionen, die speziell für eine solche Synchronisation entwickelt wurden. Warum sollten Sie sich nicht auf diese Funktionen verlassen, anstatt den "Datei-Hack" zu verwenden?
Pacerier

1
@Pacerier - Sperrdateien auf diese Weise werden wahrscheinlich häufiger von Dingen wie Shellskripten oder Programmen verwendet, die möglicherweise mit Shellskripten interagieren, da Unix / Linux-Shells im Vergleich zu anderen Synchronisationsprimitiven sehr einfach mit dem Dateisystem interagieren. Dateien können auch in unterschiedlichen Prozessen problemlos beibehalten werden. Ein hochleistungsfähiges Programm würde wahrscheinlich native Betriebssystemprimitive mit Dateien vergleichen, um Dinge intern oder sogar mit anderen Prozessen, die keine Shells sind, zu synchronisieren.
LawrenceC

14

Diese Dateien werden häufig von Daemons verwendet, die auf einem System nur einmal ausgeführt werden sollten. Die PID-Datei enthält normalerweise die Prozess-ID-Nummer des bereits gestarteten und laufenden Programms, falls vorhanden. Beim Start wird auch die Sperrdatei erstellt. Solange die Sperrdatei vorhanden ist, wird keine andere ohne Benutzereingriff 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 bei einigen Programmen ein spezielles Start- / Neustartszenario auslösen. Durch ordnungsgemäßes Herunterfahren wird die Sperrdatei entfernt.


+1 Erklärt die Verwendung von sowohl der Sperrdatei als auch der PID-Datei.
Kyle Krull

@Caleb - Bitte erläutern Sie, warum sowohl eine PID-Datei als auch eine Sperrdatei verwendet werden. Es scheint, dass eine PID-Datei ausreichen würde. Wenn die PID-Datei vorhanden ist, kann die PID überprüft werden, um festzustellen, ob der Prozess ausgeführt wird. Es sind nur weniger Schritte erforderlich, als nach einer Sperrdatei zu suchen, nach einer PID-Datei zu suchen und dann die Existenz des Prozesses zu überprüfen.
MVaughan

@MVaughan Um Rennbedingungen zu vermeiden, wenn nichts anderes. Einige Apps haben Anwendungen für Zeiten, in denen die PID noch benötigt wird, die Sperre jedoch aufgehoben werden kann. Wenn Sie jedoch eine Datei für beide Vorgänge überladen, öffnen Sie auf einer grundlegenderen Ebene die Tür zu Fehlern wie einem Absturz, der einen inkonsistenten Zustand im System hinterlässt.
Caleb

8

Eine PID-Datei enthält die Prozess-ID eines laufenden Prozesses. Dies hat verschiedene Verwendungen; 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 Prozess, auf den zugegriffen werden soll, warten soll, bis die Ressource freigegeben ist, bevor er fortfährt.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.