![如何识别锁定文件的进程?](https://linux22.com/image/847926/%E5%A6%82%E4%BD%95%E8%AF%86%E5%88%AB%E9%94%81%E5%AE%9A%E6%96%87%E4%BB%B6%E7%9A%84%E8%BF%9B%E7%A8%8B%EF%BC%9F.png)
我想知道使用锁定文件的确切进程。我不想使固定但我只是想了解我的系统在做什么。我该如何找到答案?
例如,以下消息:
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