Вопрос или проблема
Я запускаю программу с помощью chrt --rr 99 ./profiler
и проверяю её приоритет с помощью ps
и top
. Я получаю разные числа, смотрите PID 3095853 ниже:
139 -
против rt -20
. В чём причина? Это новая и старая конвенция?
Есть ли вызов API для получения PR
? Я получаю NI
с помощью getpriority()
и хотел бы иметь аналогичный способ получить PR
.
Ответ или решение
Действительно, команды top
и ps
используют разные конвенции для отображения приоритета процессов в Unix-подобных операционных системах, и это может привести к путанице у пользователей.
Различия в числовых представлениях приоритета
-
Конвенция отображения:
- Команда
ps
показывает приоритет процесса в диапазоне значений от -20 до 19. В вашем случае, значение приоритета 139, отображаемое командойps
, указывает на реальный приоритет процесса, который компилируется на основе интерпретации системы. Это значение может представлять высокий приоритет процесса (например, если "реальный" приоритет находится в "нормальном" диапазоне). - В отличие от этого, команда
top
отображает приоритет в терминах реального времени, где "rt" (от "real-time") обозначает приоритета, который варьируется в диапазоне от -20 до 19. Здесьrt -20
указывает на то, что процесс работает с высоким приоритетом реального времени.
- Команда
-
Причина различия:
- Различия связаны с тем, как каждая команда обрабатывает и интерпретирует приоритеты.
top
может использовать внутреннюю логику для отображения приоритетов процессов, которые работают с различными стандартами приоритета (нормальный, высокий и реальный).
- Различия связаны с тем, как каждая команда обрабатывает и интерпретирует приоритеты.
API вызовы и получение приоритета процесса
Для получения приоритета процесса вы можете использовать системный вызов getpriority()
, который возвращает значение, аналогичное значению NI
(nice value). Однако, чтобы получить значение реального приоритета PR
, вам потребуется использовать другие инструменты:
getpriority()
: используется для получения значенияNI
, которое представляет собой приоритет процесса в системе.- Чтение из
/proc
: Вы можете получать информацию о процессе, включая его приоритет, чтением из файлов в/proc/[pid]/stat
или/proc/[pid]/status
, где PID — идентификатор вашего процесса. Это даст вам более полное представление о статусе и приоритете процесса.
Для получения значения PR
, необходимо комбинировать значения приоритета, полученные при помощи различных методов, поскольку стандартный API не предоставляет прямого способа получить именно это значение.
Заключение
Отличия в том, как top
и ps
представляют приоритет процесса, основаны на различных конвенциях во взаимодействии с системой. Чтобы достичь полной отчетности о приоритетах и их значениях, важно использовать оба инструмента в своих комплексных реализациях, а также дополнительно обращаться к файлам системы для получения наилучших результатов.