我想知道使用锁定文件的确切过程。我不想修复它,只是想知道我的系统在做什么。我怎样才能知道?
例如,此消息:
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?
Run Code Online (Sandbox Code Playgroud)
同样,我只想确定使用它的过程,而不是如何修复它。
Bra*_*iam 46
有一个臭名昭著的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
Run Code Online (Sandbox Code Playgroud)
在这种情况下,aptitude 正在使用该文件。如果您不确定哪个用户正在锁定文件,您应该使用 root。它对很多东西也很有用,遗憾的是它没有随 Ubuntu 一起安装,所以你必须先安装它。
对于其他凡人,这是fuser
命令。这很奇怪,因为它只返回 PID 而不是进程名称:
? ~ sudo fuser /var/lib/dpkg/lock
/var/lib/dpkg/lock: 4974
Run Code Online (Sandbox Code Playgroud)
这里说的是文件和PID,也就是4974,所以我们必须调查谁是:
? ~ ps 4974
PID TTY STAT TIME COMMAND
4974 pts/1 Sl+ 0:06 aptitude
Run Code Online (Sandbox Code Playgroud)
小智 10
lslocks 是一种简单的方法。
lslocks |grep /var/lib/dpkg/lock
Run Code Online (Sandbox Code Playgroud)
使用 shell 处理进程 ID:
for pid in `lslocks -rn | grep /var/lib/dpkg/lock|awk '{print $2}'`;
do
echo $pid;
done
Run Code Online (Sandbox Code Playgroud)