Вы можете прочитать содержимое /proc/[your PID]/stat
, чтобы получить информацию для всего процесса, и если у вас ядро 2.6, есть также /proc/[your PID]/task/[thread ID]/stat
с информацией для отдельных потоков. (см. здесь )
В частности, вы найдете эти два поля:
Количество случаев, когда этот процесс был запланирован в пользовательском режиме.
stime% lu
Количество jiffies, что этот процесс был запланирован в режиме ядра.
cutime% ld
Проблемная часть здесь - это единица измерения значений. Jiffy равен 1 / HZ секундам, где HZ - тактовая частота ядра, и определение этой тактовой частоты является сложной частью.
Если вам это нужно только для одной конкретной системы, вы можете просто провести несколько тестов или просмотреть заголовки ядра и жестко запрограммировать это значение в своей программе. Если вы хотите узнать, как определить его в более общем виде, вы можете посмотреть, как это делает инструмент типа top, посмотрев его исходный код (см. Функцию old_Hertz_hack()
и соответствующие комментарии. )