Answers:
臭名昭著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
ps $(sudo fuser /var/lib/dpkg/lock)
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
lslocks
是最好的方法。使用lsof
给了我这个错误:“ lsof:警告:不能stat()fuse.gvfsd-fuse文件系统/ run / user / 1000 / gvfs输出信息可能不完整”
lsof
臭名昭著?有问题吗?