ファイルをロックするプロセスを一覧表示するには?

ファイルをロックするプロセスを一覧表示するには?

を使用すると、flock複数のプロセスが同時に共有ロックを保持するか、書き込みロックを取得するのを待つことができます。これらのプロセスのリストをどのように取得できますか?

つまり、指定されたファイルXに対して理想的には、ファイルロックを保持するか、待機しているすべてのプロセスのプロセスIDを見つけます。ロックを待っているプロセスの数を数えるだけで、非常に良いスタートになることができます。

答え1

lslocksからユーティリティLinuxパッケージ、まさにそうです。

このMODE列には、ロックを待つプロセスが表示されます*

答え2

2つの可能性:(lsof私の好み)またはlslk(特にファイルロック):

[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

lslkの出力は説明を必要としませんが、lsof「FD」列(上記10uW)にロック記述を入れます。マニュアルページから:

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.

したがって、上記の「FD」列はlsof次のように分類されます。

10このオープンファイルのリテラル記述子です。何につなげるか/proc/1650/fd/10

uファイルが読み取りおよび書き込み用に開かれています。

Wプログラムにファイルへの書き込みロックがあります。

答え3

lsofはファイルのリストを見るのに役立ちます。ロックされたファイルを表示する方法は次のとおりです。

sudo lsof /var/lib/dpkg/lock 

答え4

lsofこの情報がシステムにない場合は、ls /proc/*/fd/* | grep LOCK_FILE_NAME同じ情報を提供する必要があります。

関連情報