使用flock
,多个进程可以同时拥有共享锁,或者等待获取写锁。如何获取这些进程的列表?
也就是说,对于给定的文件 X,理想情况下要找到持有或正在等待文件锁的每个进程的进程 ID。尽管只是为了获取等待锁的进程数量的计数,但这将是一个非常好的开始。
答案1
lslocks
, 来自util-linux 包,正是这样做的。
在该MODE
列中,等待锁的进程将标有*
。
答案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
则应提供相同的信息。