Я могу перечислить все доступные идентификаторы PID на машине с помощью ls /proc/[0-9]*, а затем перебрать список. Что мне использовать в качестве ключа кэша для защиты от повторного использования номера pid?
Другими словами, рассмотрим следующий код Python, который открывает два каталога pid в несколько разных моментов времени. Что нужно для сравнения каталогов, чтобы проверить, действительно ли они относятся к процессу?
Код: Выделить всё
pid_dir_fd1 = os.open("/proc/123", os.O_RDONLY)
time.sleep(1)
pid_dir_fd2 = os.open("/proc/123", os.O_RDONLY)
print(are_pid_dirs_equal(pid_dir_fd1, pid_dir_fd2))
/{cmdline,exe,stat,status для сбора информации о процессах. Или я могу? Я не знаю, как можно связать pidfd с файлом /proc//files.
Моя текущая идея — сравнить поле времени начала файла статистики процесса:
Код: Выделить всё
def read_text(file: str, dir_fd: int):
with os.open(file, dir_fd=dir_fd) as f:
return f.read()
def stat_field(statstr: str, idx: int):
return int(statstr.split(")")[-1].split()[idx - 3])
pid_dir_fd1 = os.open("/proc/123", os.O_RDONLY)
starttime1 = stat_field(read_text("stat", pid_dir_fd1), 22)
time.sleep(1)
pid_dir_fd2 = os.open("/proc/123", os.O_RDONLY)
starttime2 = stat_field(read_text("stat", pid_dir_fd2), 22)
if create_time1 == create_time2:
print("both directories are equal")
else:
print("pid_dir_fd1 died in the meantime")
Подробнее здесь: https://stackoverflow.com/questions/798 ... olled-over
Мобильная версия