当前位置: 首页>>技术教程>>正文


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

问题描述

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

例如,此消息:

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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/9215.html,未经允许,请勿转载。