是否有 C/C++ 库以及有关如何在 Solaris 上收集系统和进程信息的文档?
虽然我可以解析命令行工具,但我宁愿使用一个使任务更容易完成的库。
谢谢
编辑:建议使用 /proc 虚拟目录来收集信息,但它并不比解析命令行工具好多少,因为我需要为我的每条数据实现某种自定义解析需要。
我正在寻找类似于 Windows 或 MacOS 的 c 库的东西,它通过基于 c 的系统 API 提供此信息,但是我对谷歌没有运气。
Solaris has the /proc virtual directory, which allows you to gather all sorts of information about processes using filesystem I/O functions.
I would use the /proc virutal dir as CrashWorks has suggested. I've done this on both aux and linux. One thing to keep in mind is when I did use the /proc dir on linux the format of the files varied from one kernel to another.
I don't know what the situation is like on the Solaris side but this could mean that your solution will not be portable from one solaris platform to another.
what about 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。免责声明:这对我有用,但您的里程可能会有所不同。我很可能会走投无路,我不想把你引向错误的方向。