如何从Solaris系统以C / C ++编程方式获取进程信息?

是否有C / C ++库以及有关如何在Solaris上收集系统和进程信息的文档?

虽然我可以解析命令行工具,但我宁愿使用一个使任务更容易的库。

谢谢

编辑:有人建议使用/ proc虚拟目录来收集信息,但是它比解析命令行工具要好得多,因为我需要为每一段数据实现某种自定义解析需要。

我正在寻找一些针对Windows或MacOS的c库,通过基于c的系统API提供这些信息,但我对谷歌没有好运。

您可以使用kstat API获取此类信息。

man -s 3KSTAT kstat 

您可以在OpenSolaris vmstat和iostat源中看到它的使用方式。

有关processus的信息,我会看看ps 。

Solaris具有/ proc虚拟目录 ,允许您使用文件系统I / Ofunction收集有关进程的各种信息。

我会像CrashWorks建议的那样使用/ proc virutal目录。 我在aux和linux上都做过这个。 要记住的一件事是当我在linux上使用/ proc目录时,文件的格式因内核而异。

我不知道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。 免责声明:这对我有用,但您的里程可能会有所不同。 我很可能会离开墙,我不想让你走错方向。