を使用すると、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
同じ情報を提供する必要があります。