Использует ли “top” другую конвенцию, чем “ps”, для отображения приоритета процессов?

Вопрос или проблема

Я запускаю программу с помощью chrt --rr 99 ./profiler и проверяю её приоритет с помощью ps и top. Я получаю разные числа, смотрите PID 3095853 ниже:

введите описание изображения здесь

139 - против rt -20. В чём причина? Это новая и старая конвенция?

Есть ли вызов API для получения PR? Я получаю NI с помощью getpriority() и хотел бы иметь аналогичный способ получить PR.

Ответ или решение

Действительно, команды top и ps используют разные конвенции для отображения приоритета процессов в Unix-подобных операционных системах, и это может привести к путанице у пользователей.

Различия в числовых представлениях приоритета

  1. Конвенция отображения:

    • Команда ps показывает приоритет процесса в диапазоне значений от -20 до 19. В вашем случае, значение приоритета 139, отображаемое командой ps, указывает на реальный приоритет процесса, который компилируется на основе интерпретации системы. Это значение может представлять высокий приоритет процесса (например, если "реальный" приоритет находится в "нормальном" диапазоне).
    • В отличие от этого, команда top отображает приоритет в терминах реального времени, где "rt" (от "real-time") обозначает приоритета, который варьируется в диапазоне от -20 до 19. Здесь rt -20 указывает на то, что процесс работает с высоким приоритетом реального времени.
  2. Причина различия:

    • Различия связаны с тем, как каждая команда обрабатывает и интерпретирует приоритеты. top может использовать внутреннюю логику для отображения приоритетов процессов, которые работают с различными стандартами приоритета (нормальный, высокий и реальный).

API вызовы и получение приоритета процесса

Для получения приоритета процесса вы можете использовать системный вызов getpriority(), который возвращает значение, аналогичное значению NI (nice value). Однако, чтобы получить значение реального приоритета PR, вам потребуется использовать другие инструменты:

  • getpriority(): используется для получения значения NI, которое представляет собой приоритет процесса в системе.
  • Чтение из /proc: Вы можете получать информацию о процессе, включая его приоритет, чтением из файлов в /proc/[pid]/stat или /proc/[pid]/status, где PID — идентификатор вашего процесса. Это даст вам более полное представление о статусе и приоритете процесса.

Для получения значения PR, необходимо комбинировать значения приоритета, полученные при помощи различных методов, поскольку стандартный API не предоставляет прямого способа получить именно это значение.

Заключение

Отличия в том, как top и ps представляют приоритет процесса, основаны на различных конвенциях во взаимодействии с системой. Чтобы достичь полной отчетности о приоритетах и их значениях, важно использовать оба инструмента в своих комплексных реализациях, а также дополнительно обращаться к файлам системы для получения наилучших результатов.

Оцените материал
Добавить комментарий

Капча загружается...