Bei Verwendung von flock
können mehrere Prozesse gleichzeitig eine gemeinsame Sperre haben oder darauf warten, eine Schreibsperre zu erhalten. Wie bekomme ich eine Liste dieser Prozesse?
Dies bedeutet, dass für eine gegebene Datei X idealerweise die Prozess-ID jedes Prozesses gefunden wird, der eine Sperre für die Datei enthält oder auf diese wartet. Es wäre jedoch ein sehr guter Anfang, um die Anzahl der Prozesse zu ermitteln, die auf eine Sperre warten.
lsof
Joel Davis vorgeschlagenen Ansatz verwenden.lslocks
liest/proc/locks
, zur Not können Sie das direkt selbst lesen, mit dem Vorbehalt, dass Dateien nicht nach Namen, sondern nach Gerät und Inode identifiziert werden. Da Sie die Datei kennen, sollte das kein Problem sein. Gesperrte Einträge haben ein->
Präfix vor der Spalte mit dem Sperrtyp (und fügen dieser Zeile daher eine Spalte hinzu).Zwei Möglichkeiten:
lsof
(meine Präferenz) oderlslk
(speziell für Dateisperren):Die Ausgabe von lslk ist selbsterklärend, fügt jedoch
lsof
die Beschreibung der Sperre in die Spalte "FD" ein ( siehe10uW
oben). Von der Manpage:Die "FD" -Spalte von
lsof
oben gliedert sich also in:10
Der wörtliche Deskriptor dieser geöffneten Datei. Was ist verbunden mit/proc/1650/fd/10
u
Die Datei ist zum Lesen und Schreiben geöffnetW
Programm hat eine Schreibsperre für die Datei.quelle
flock
! = mutex. Ihr grep hätte Sperren wie die in der Post verpasst (ganz zu schweigen von dem ersten Feld ist Programmname ...)lsof kann helfen, die Liste der Dateien anzuzeigen. Hier sehen Sie die gesperrten Dateien.
quelle
Falls
lsof
selbst auf dem System fehlt,ls /proc/*/fd/* | grep LOCK_FILE_NAME
sollten die gleichen Informationen zur Verfügung gestellt werden.quelle