Files

如何列出程序鎖定文件?

  • October 29, 2018

使用flock,多個程序可以同時擁有一個共享鎖,或者等待獲取寫鎖。如何獲得這些程序的列表?

也就是說,對於給定的文件 X,理想情況下要找到每個程序的程序 ID,該程序 id 持有或等待該文件的鎖定。這將是一個非常好的開始,儘管只是為了計算等待鎖的程序數。

lslocks,來自util-linux 包,正是這樣做的。

在該MODE列中,等待鎖定的程序將用 標記*

兩種可能性:(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程序對文件有寫鎖。

引用自:https://unix.stackexchange.com/questions/85994