有 lsof 的 python 模組嗎?

有 lsof 的 python 模組嗎?

每次我嘗試透過運行來更新我的 Kali Linux 時

sudo apt update

我收到以下錯誤訊息

Unable to lock directory /var/lib/apt/lists/

我解決這個問題的方法是透過運行來尋找進程

lsof /var/lib/dpkg/lock
lsof /var/lib/apt/lists/lock
lsof /var/cache/apt/archives/lock

並殺死已取得鎖的進程。

我想自動化這個流程。

答案1

您應該問的問題的答案

這不是一個好主意。您不應該盲目地終止進程。找出哪個進程鎖定了檔案以及原因。

此外,如果您經常遇到此問題,則可能是您做錯了什麼。 Kali Linux 是一個用於滲透測試的專用發行版。它不是為安裝而設計的。若要執行滲透測試以外的任何操作,請勿使用 Kali。使用正常發行版,例如 Ubuntu。

如何在 Python 中尋找開啟檔案的進程

您可以使用psutil包來枚舉進程並列舉它們已開啟的檔案。https://stackoverflow.com/questions/20106220/check-for-open-files-with-python-in-linux有一個程式碼範例。

要僅枚舉開啟檔案的進程,解析以下命令的輸出可能會更容易fuser

import os, subprocess
try:
    pids = subprocess.check_output(['fuser', '--', filename], stdout=open(os.devnull))
    for pid in map(int, pids.split()):
       print('Process {} has {} open'.format(pid, filename))

答案2

無法鎖定目錄 /var/lib/apt/lists/

apt提供 apt-daily-upgrade.serviceapt-daily.service服務,啟用apt後將在背景執行。看systemctl list-timers

禁用它:

systemctl disable apt-daily.timer
systemctl disable apt-daily.service
systemctl disable apt-daily-upgrade.timer
systemctl disable apt-daily-upgrade.service

德班:無人值守升級

相關內容