web-dev-qa-db-fra.com

Comment lister les processus de verrouillage du fichier?

En utilisant flock, plusieurs processus peuvent avoir un verrou partagé en même temps, ou être en attente d'acquérir un verrou en écriture. Comment obtenir une liste de ces processus?

C'est-à-dire, pour un fichier X donné, idéalement pour trouver l'ID de processus de chaque processus qui détient ou attend un verrou sur le fichier. Ce serait cependant un très bon début pour obtenir un décompte du nombre de processus en attente d'un verrou.

57
Benubird

lslocks, du paquet util-linux , fait exactement cela.

Dans la colonne MODE, les processus en attente d'un verrou seront marqués d'un *.

49
mattdm

Deux possibilités: lsof (ma préférence) ou lslk (spécifiquement pour les verrous de fichiers):

[root@policyServer ~]# lslk | grep "master.lock"
SRC          PID   DEV  INUM   SZ TY M   ST WH  END LEN NAME
master      1650 253,0 12423   33  w 0    0  0    0   0 /var/lib/postfix/master.lock

[root@policyServer ~]# lsof | grep "master.lock"
master     1650      root   10uW     REG              253,0       33      12423 /var/lib/postfix/master.lock

La sortie de lslk est auto-expansive mais lsof place la description du verrou dans la colonne "FD" (qui est 10uW au dessus de). Depuis la page de manuel:

The mode character is followed by one of these lock characters, describing the type of lock applied to the file:

N for a Solaris NFS lock of unknown type;
r for read lock on part of the file;
R for a read lock on the entire file;
w for a write lock on part of the file;
W for a write lock on the entire file;
u for a read and write lock of any length;
U for a lock of unknown type;
x for an SCO OpenServer Xenix lock on part      of the file;
X for an SCO OpenServer Xenix lock on the      entire file;
                       space if there is no lock.

Ainsi, la colonne "FD" de lsof ci-dessus se décompose en:

10 Le descripteur littéral de ce fichier ouvert. À quoi est lié par /proc/1650/fd/10

u Le fichier est ouvert pour la lecture et l'écriture

W programme a un verrou en écriture sur le fichier.

29
Bratchley

lsof peut aider à voir la liste des fichiers. voici comment voir les fichiers verrouillés.

Sudo lsof /var/lib/dpkg/lock 
5
Hafiz Shehbaz Ali

dans le cas où lsof lui-même est manquant sur le système, ls /proc/*/fd/* | grep LOCK_FILE_NAME devrait fournir les mêmes informations.

0
PypeBros