Есть ли модуль Python для lsof?

Есть ли модуль Python для lsof?

Каждый раз, когда я пытаюсь обновить свой 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/

aptprovide apt-daily-upgrade.serviceи apt-daily.serviceservices, если они включены, 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

Дебиан:Автоматические обновления

Связанный контент