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

StackOverflow https://stackoverflow.com/questions/445382

Вопрос

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

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

Спасибо

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

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

Это было полезно?

Решение

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

man -s 3KSTAT  kstat

Вы можете увидеть, как это используется в OpenSolaris вмстат и иостат Источник.

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

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

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

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

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

о чем getrusage()?

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

Я нашел это Статья полезный.

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

 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.Отказ от ответственности:У меня это сработало, но ваш пробег может отличаться.Я вполне мог бы сойти со стены, и я не хочу вести вас в неправильном направлении.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top