Как программно получить информацию о процессе на C / C++ из системы Solaris?

Есть ли библиотека C / C++ и документация о том, как собирать информацию о системе и процессах в Solaris?

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

Спасибо

Редактировать: Было предложено использовать виртуальный каталог / proc для сбора информации, однако это не намного лучше, чем инструменты синтаксического анализа командной строки, в том смысле, что мне нужно будет реализовать какой-то настраиваемый синтаксический анализ для каждого фрагмента данных, который мне нужен. .

Я ищу что-то вроде библиотек c для Windows или MacOS, которые предоставляют эту информацию через системный API на основе c, однако мне не повезло с Google.

что вам нужно? пид? использование памяти / процессора? дисковое пространство?

user44511 15.01.2009 05:07
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
1
6 280
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Я определенно не эксперт в этом вопросе, но я сделал нечто очень похожее для задания в прошлом семестре, когда от нас требовалось делать снимки процессов. К сожалению, этот метод требует копаться в ядре, что, вероятно, не то, что вам нужно.

Я нашел этот статья полезным.

В любом случае вот несколько фрагментов.

 write_lock_irq(&tasklist_lock);
  for_each_process(task) {

    if (system_or_user == 0)
      print_mem_user(task);
    if (system_or_user == 1)
      print_mem_system(task);
  }
  write_unlock_irq(&tasklist_lock);

Идея, что вам нужно заблокировать некоторые структуры данных, или иногда ядро ​​зависает. "for_each_process" - это макрос, определенный где-то, но я не помню, как он работает D:

static void print_mem_system(struct task_struct *task)
{
  struct mm_struct *mm;

  if (task -> mm == NULL){ // this is how you distinguish system processes from user processes
    myarraypid[totalnumberofprocesses] = task -> pid; // store process id's into myarraypid[], which you can later copy back to user space for printing/display. Additional information would be found in a "task_struct" which is Linux's implementation of a process. 



  }


}

Некоторые из моих одноклассников использовали разные подходы и погрузились в исходники утилиты «ps». Кажется, я работал над Linux 2.6.18-92.1.13.e15. Отказ от ответственности: это сработало для меня, но ваш опыт может отличаться. Я вполне могу оторваться от стены, и я не хочу вести вас в неверном направлении.

В Solaris есть / proc виртуальный каталог, который позволяет собирать всевозможную информацию о процессах с помощью функций ввода-вывода файловой системы.

Я бы использовал виртуальный каталог / proc, как предложил CrashWorks. Я делал это как на aux, так и на linux. Следует иметь в виду, что когда я использовал каталог / proc в Linux, формат файлов менялся от одного ядра к другому.

Я не знаю, какова ситуация на стороне Solaris, но это может означать, что ваше решение не будет переносимым с одной платформы Solaris на другую.

Файлы Linux обычно бывают текстовыми; Те, что в Solaris, содержат двоичную информацию.

Jonathan Leffler 15.01.2009 06:46

Действительно. На данный момент не гарантируется стабильный интерфейс в Solaris, но вы можете получить все необходимое от proc.h и его друзей.

Martin Carpenter 17.01.2009 16:31

что насчет getrusage()?

Ответ принят как подходящий

Вы можете получить такую ​​информацию с помощью kstat API.

man -s 3KSTAT  kstat

Вы можете увидеть, как он используется в исходниках OpenSolaris vmstat и iostat.

Для получения информации о processus я бы посмотрел на пс.

Другие вопросы по теме