有 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

德班:无人值守升级

相关内容