Я разрабатываю приложение на C ++ с возможностями мониторинга процессов, которое отслеживает изменения состояния на основе этой модели: http://www.macdesign.net/capella/it4813/images/stallings-Linux_process-thread_states-f4.18.png
Однако, так как / proc / pid / status объединяет состояния «готов» и «выполнение» в состояние «запущен», я не понимаю, как узнать, в каком из этих состояний находится процесс. Может кто-нибудь предложить какие-либо предложения относительно того, как я могу обнаружить это?
Вопрос неверный. На одном процессоре это буквально никогда можно увидеть процесс в «запущенном» состоянии, поскольку по определению процесс мониторинга имеет ЦП. Если вам действительно требуется детальное управление журналированием переходов процессов, вам нужно сделать это в ядре (или, по крайней мере, с поддержкой в ядре — см. Lttng или systemtap для инструментов, которые могут помочь здесь). Инструменты для отслеживания использования ЦП из пользовательского пространства являются более грубыми, либо с использованием общих чисел использования, уже отслеженных ядром (например, /usr/bin/time
) или путем выборки таблицы процессов через определенные промежутки времени (загрузочная диаграмма работает таким образом).
Других решений пока нет …