如何识别锁定文件的进程?

我想知道使用锁文件的确切过程。 我不想修复它,只是想知道我的系统在做什么。 我该怎么知道?

例如,此消息:

E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable) E: Unable to lock the administration directory (/var/lib/dpkg/), is another process using it? 

同样,我只想确定使用它的过程, 而不是如何解决它。

有臭名昭着的lsof

 sudo lsof /var/lib/dpkg/lock COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME aptitude 4974 root 3uW REG 8,23 0 815673 /var/lib/dpkg/lock 

在这种情况下,aptitude正在使用该文件。 如果您不确定哪个用户正在锁定文件,您应该使用root。 它对于一堆东西也很有用,遗憾的是它没有安装Ubuntu,所以你必须先安装它。

对于其他凡人来说,有一个fuser命令。 这是特殊的,因为它只返回PID而不是进程的名称:

 ➜ ~ sudo fuser /var/lib/dpkg/lock /var/lib/dpkg/lock: 4974 

这里它说文件和PID,这是4974,所以我们必须调查谁是:

 ➜ ~ ps 4974 PID TTY STAT TIME COMMAND 4974 pts/1 Sl+ 0:06 aptitude 

lslocks是一种简单的方法。

 lslocks |grep /var/lib/dpkg/lock 

使用shell来处理进程id:

 for pid in `lslocks -rn | grep /var/lib/dpkg/lock|awk '{print $2}'`; do echo $pid; done