Есть ли библиотека C / C++ и документация о том, как собирать информацию о системе и процессах в Solaris?
Хотя я мог анализировать инструменты командной строки, я бы предпочел использовать библиотеку, которая упрощает выполнение задачи.
Спасибо
Редактировать: Было предложено использовать виртуальный каталог / proc для сбора информации, однако это не намного лучше, чем инструменты синтаксического анализа командной строки, в том смысле, что мне нужно будет реализовать какой-то настраиваемый синтаксический анализ для каждого фрагмента данных, который мне нужен. .
Я ищу что-то вроде библиотек c для Windows или MacOS, которые предоставляют эту информацию через системный API на основе c, однако мне не повезло с Google.





Я определенно не эксперт в этом вопросе, но я сделал нечто очень похожее для задания в прошлом семестре, когда от нас требовалось делать снимки процессов. К сожалению, этот метод требует копаться в ядре, что, вероятно, не то, что вам нужно.
Я нашел этот статья полезным.
В любом случае вот несколько фрагментов.
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, содержат двоичную информацию.
Действительно. На данный момент не гарантируется стабильный интерфейс в Solaris, но вы можете получить все необходимое от proc.h и его друзей.
что насчет getrusage()?
что вам нужно? пид? использование памяти / процессора? дисковое пространство?