import psutil
def find_closest_process(target_pid, tolerance):
closest_process = None
closest_pid = None
closest_memory = None
# Определяем диапазон PID
min_pid = target_pid - tolerance
max_pid = target_pid + tolerance
for proc in psutil.process_iter(['pid', 'name', 'memory_info']):
try:
pid = proc.info['pid']
if min_pid <= pid <= max_pid:
# Если найден процесс, проверим, является ли он самым близким
if closest_pid is None or abs(pid - target_pid) < abs(closest_pid - target_pid):
closest_pid = pid
closest_process = proc
closest_memory = proc.info['memory_info'].rss # Используем RSS (Resident Set Size)
except (psutil.NoSuchProcess, psutil.AccessDenied):
continue
return closest_process, closest_memory
def calculate_page_size(memory_in_bytes):
# Ищем подходящую степень двойки в диапазоне от 10 до 20
for power in range(10, 21):
page_size = 2 ** power
if memory_in_bytes / page_size > 0: # Объем страниц должен быть положительным
return memory_in_bytes // page_size
return None
# Задаем PIDs и толерантность
pids = [10252, 5052]
tolerance = 100
for pid in pids:
process, memory = find_closest_process(pid, tolerance)
if process:
pages = calculate_page_size(memory)
print(f"Имя процесса: {process.info['name']}, PID: {process.info['pid']}, Кол-во занимаемой памяти: {memory} в байтах, Кол-во страниц: {pages}")
else:
print(f"Процессы с похожими PID не найдены: {pid} с учётом погрешности {tolerance}.")