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

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

我想知道使用锁定文件的确切进程。我不想使固定但我只是想了解我的系统在做什么。我该如何找到答案?

例如,以下消息:

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?

再次强调,我只是想确定使用它的过程,不是如何修复它。

答案1

其中有臭名昭著的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

答案2

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

相关内容