En utilisant flock
plusieurs processus, vous pouvez avoir un verrou partagé en même temps ou attendre l’acquisition d’un verrou en écriture. Comment puis-je obtenir une liste de ces processus?
C'est-à-dire que, pour un fichier X donné, l'idéal est de trouver l'ID de processus de chaque processus qui détient ou attend un verrou sur le fichier. Ce serait un très bon début, cependant, juste pour obtenir un décompte du nombre de processus en attente d'un verrou.
lsof
approche proposée par Joel Davis.lslocks
lit/proc/locks
, vous pouvez le lire directement vous-même, avec l’avertissement que les fichiers sont identifiés par périphérique et inode plutôt que par nom. Puisque vous connaissez le fichier, cela ne devrait pas être un problème. Les entrées bloquées ont un->
préfixe avant la colonne de type verrou (ce qui ajoute une colonne à cette ligne).Deux possibilités:
lsof
(à ma préférence) oulslk
(spécifiquement pour les verrous de fichiers):La sortie de lslk est auto-expanatoire, mais
lsof
place la description du verrou dans la colonne "FD" (ci-10uW
dessus). De la page de manuel:La colonne "FD"
lsof
ci - dessus se décompose ainsi:10
Le descripteur littéral de ce fichier ouvert. Qu'est-ce qui est lié à par/proc/1650/fd/10
u
Le fichier est ouvert en lecture et en écritureW
programme a un verrou en écriture sur le fichier.la source
flock
! = mutex. Votre grep aurait raté des verrous comme celui-ci dans le message (pour ne pas mentionner le premier champ est le nom du programme ...)lsof peut aider à voir la liste des fichiers. Voici un moyen de voir les fichiers verrouillés.
la source
dans le cas où
lsof
elle est absente du système,ls /proc/*/fd/* | grep LOCK_FILE_NAME
devrait fournir les mêmes informations.la source