问题描述
我想知道使用锁定文件的确切过程。我不想修复它,而只是想知道我的系统在做什么。我怎么知道?
例如,此消息:
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