83

使用一大群,多个进程可以同时拥有共享锁,或者等待获取写锁。如何获取这些流程的列表?

也就是说,对于给定的文件X,理想的做法是找到每个进程的进程id,该进程持有或正在等待文件的锁。这将是一个很好的开始,尽管只需要统计等待锁的进程的数量。

4个答案4

重置为默认值
79

ls锁,来自util-linux包,正是这样做的。

MODE(模式)列中,等待锁定的进程将标记为*.

4
  • Apt-cache说util-linux已经是最新版本(2.20.1-1ubuntu3),但我没有lslocks;有我可以使用的回购协议吗? 评论 2013年8月8日15:36
  • 2
    看起来这是在2.22中添加的,所以Ubuntu的版本太旧了。可能最终会有一个新版本。(RHEL 6或CentOS也是如此。)您可以自己构建它,也可以使用lsof公司乔尔·戴维斯建议的方法。
    – 马特dm
    评论 2013年8月8日18:26
  • 7
    ls锁读取/进程/锁在必要的时候,您可以自己直接阅读,但需要注意的是,文件是由设备和inode而不是名称标识的。既然你知道这个文件,那应该不是问题。被阻止的条目具有->锁类型列之前的前缀(从而将一列添加到该行)。 评论 2013年8月9日10:34
  • 就我而言ls锁显示文件被不存在的PID锁定。但是lsof公司指出了真正的罪魁祸首ssh-代理¨(ツ)¨/¨它可能在我尝试时进入羊群-c发射了一枚炮弹。。 评论 2021年12月13日20:48
38

两种可能性:lsof公司(我的喜好)或lslk公司(专门用于文件锁定):

[root@policyServer~]#lslk|grep“master.lock”SRC PID开发INUM SZ TY M ST WH端透镜名称主机1650 253,0 12423 33 w 0 0 0 0 0/var/lib/postfix/master.lock[root@policyServer~]#lsof|grep“master.lock”主1650根10uW REG 253,0 33 12423/var/lib/postfix/master.lock

lslk的输出是自我表现的,但lsof公司将锁描述放在“FD”列中(即10千瓦以上)。从手册页:

模式字符后面是这些锁定字符之一,用于描述应用于文件的锁定类型:N表示未知类型的Solaris NFS锁;r表示文件部分的读锁;R表示整个文件的读锁;w表示文件部分的写锁;W表示整个文件的写锁;u表示任何长度的读写锁;U表示未知类型的锁;x表示部分文件上的SCO OpenServer Xenix锁;X表示整个文件上的SCO OpenServer Xenix锁;如果没有锁,则为空格。

因此lsof公司以上分解为:

10此打开文件的文字描述符。链接到的内容/程序/1650/fd/10

u个文件已打开,可以读取和写入

W公司程序对文件有写锁定。

5
  • 1
    我找不到哪里可以获得lslk,它似乎不再被维护。还值得指出的是,如果您希望lsof只显示实际锁定文件的进程,则需要为“^mutex”进行grep。它也没有区分“保持”和“阻塞”。 评论 2013年8月9日8:35
  • FD字段的第一个字母字符是打开文件时使用的文件(我假设这是您持有的意思),可选的第二个字母字符就是文件上的锁(如果有)(我假设是您所说的“阻塞”)一大群!= 互斥。您的grep可能会丢失像post中那样的锁(更不用说第一个字段是程序名…) 评论 2013年8月9日11:49
  • 哦!你说得对——“mutex”是我的脚本的名字,所以grepping for‘mutex’只适用于我的情况。谢谢你指出这一点 评论 2013年8月9日15:50
  • 看起来我也做了个boo-boo:“第一个字母是模式它用…打开了文件。。。" 评论 2013年8月9日17:06
  • 1
    摘自“man-lslocks”:注lslocks命令意在取代最初由Victor A.Abell编写的lslk(8)命令<[电子邮件保护]>自2001年以来未维护。 评论 2023年5月26日20:00
8

lsof可以帮助查看文件列表。下面是查看锁定文件的方法。

sudo-lsof/var/lib/dpkg/lock
2
  • 不提供输出,但错误代码1
    – 严峻的
    评论 1月11日22:54
  • 如果此文件由于任何进程而未被锁定,则可能会产生错误代码。lsof表示此文件中的进程列表。 评论 1月14日19:31
5

万一lsof公司系统中缺少自身,ls/proc/*/fd/*|grep LOCK_FILE_NAME(文件名)应提供相同的信息。

你必须登录来回答这个问题。

不是你想要的答案吗?浏览标记的其他问题.