web-dev-qa-db-ja.com

ファイルをロックしているプロセスをリストする方法は?

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

つまり、特定のファイルXについて、理想的には、ファイルのロックを保持しているか、ファイルのロックを待機している各プロセスのプロセスIDを見つけます。ロックを待機しているプロセスの数のカウントを取得するだけで、非常に良いスタートになります。

57
Benubird

til-linuxパッケージlslocksは、まさにこれを行います。

MODE列では、ロックを待機しているプロセスは*でマークされます。

49
mattdm

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)。 manページから:

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.

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

10この開いているファイルのリテラル記述子。 /proc/1650/fd/10のリンク先

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

Wプログラムはファイルに書き込みロックを持っています。

29
Bratchley

lsofは、ファイルのリストを表示するのに役立ちます。ロックされたファイルを確認する方法を次に示します。

Sudo lsof /var/lib/dpkg/lock 
5

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

0
PypeBros