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}.")