回答:
lslocks
、util-linuxパッケージから、まさにこれを行います。
ではMODE
、カラム、ロックを待っているプロセスはマークが付きます*
。
lsof
Joel Davisが提案するアプローチを使用することもできます。
lslocks
読み取り/proc/locks
、ピンチでは、ファイルを名前ではなくデバイスとiノードで識別するという注意を払って、自分で直接読み取ることができます。ファイルを知っているので、それは問題ではないはずです。ブロックされたエントリには->
、ロックタイプの列の前に接頭辞があります(したがって、その行に列が追加されます)。
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.
したがって、上記の「FD」列は次のlsof
ように分類されます。
10
この開いているファイルのリテラル記述子。にリンクされているもの/proc/1650/fd/10
u
ファイルは読み取りおよび書き込み用に開かれています
W
プログラムはファイルの書き込みロックを持っています。
flock
!=ミューテックス。あなたのgrepは、投稿にあるようなロックを見逃しているでしょう(最初のフィールドはプログラム名です...)
lsofは、ファイルのリストを確認するのに役立ちます。ここにロックされたファイルを見る方法があります。
sudo lsof /var/lib/dpkg/lock