
我的 Linux 伺服器上有一個爭論點。多個進程之一存取單個文件,並在隨機時間鎖定該文件相當長的一段時間(> 60 秒),這反過來會導致其他事情失敗。
有沒有辦法檢測多久文件已被鎖定,是由哪個程序鎖定的?
答案1
我認為您正在尋找的是文件/proc/locks
。它顯示系統中目前的檔案鎖定。這不顯示文件被鎖定多長時間,但它顯示透過哪個過程。也許您可以偵測鎖何時在此文件中註冊並測量經過的時間。範例是這樣的:
cat /proc/locks
1: POSIX ADVISORY WRITE 2245 08:06:1182714 1073741824 1073741824
2: POSIX ADVISORY WRITE 2245 08:06:1182714 1073741826 1073742335
3: POSIX ADVISORY WRITE 3058 08:06:10752740 0 0
4: POSIX ADVISORY WRITE 3058 08:06:10752739 0 0
5: POSIX ADVISORY WRITE 2421 08:06:10752766 0 EOF
6: POSIX ADVISORY WRITE 2421 08:06:11142048 0 EOF
7: POSIX ADVISORY WRITE 2421 08:06:9964366 1073741824 1073742335
8: POSIX ADVISORY WRITE 2421 08:06:11142040 0 EOF
列所在的位置:
- 第一的: 鎖 #。
- 第二:鎖類型(POSIX,如果鎖是使用建立的
fcntl
,FLOCK
如果是使用flock
. - 第三:鎖定模式(建議或強制)
- 向前:鎖類型(WRITE或READ),對應鎖共用或排他。
- 第五:具有鎖的進程的PID。
- 第六:三個數字,由三個數字分隔,
:
標識鎖定的檔案。 - 第七:鎖的起始位元組。
- 第八:鎖的結束位元組
答案2
您只需查看建立鎖定檔案時的時間戳記即可知道鎖定檔案的年齡。類似地,如果您“cat logfile.name”,它通常會將建立它的進程 ID 作為其唯一內容。