Có một số câu trả lời hay ở đây, nhưng chỉ muốn thêm một phương pháp không phải là lsof để tìm người dùng khóa dpkg
Bước 1: Tìm hiểu ai đang khóa dpkg:
Tùy chọn # 1: Sử dụng lsof (không phải lúc nào cũng được cài đặt trên máy)
lsof /var/lib/dpkg/lock
Tùy chọn # 2: Sử dụng bash
for pid in $(ls /proc | egrep [0-9]+); do sudo ls -l /proc/$pid/fd 2>/dev/null | grep /var/lib/dpkg/lock && echo $pid; done
Bước 2: Quyết định những gì bạn muốn làm với người dùng dpkg hiện tại
Nếu không có quá trình như vậy, không có gì để quyết định, chỉ cần bỏ qua bước tiếp theo.
Nếu không, bạn phải quyết định nếu bạn muốn giết quá trình hoặc để nó kết thúc một cách duyên dáng. Nếu bạn quyết định giết nó, chỉ cần sử dụng kill <pid>
. Nếu quy trình vẫn không chết, bạn có thể cân nhắc việc giết nó bằng cách sử dụng kill -9 <pid>
, nhưng nó có thể tạo ra những mâu thuẫn nhất định và tôi khuyên bạn nên chống lại nó trừ khi bạn biết bạn đang làm gì.
Bước 3: Xóa tệp khóa
sudo rm /var/lib/dpkg/lock
Bước 4: Khắc phục trạng thái nội bộ dpkg
sudo dpkg --configure -a