我想列出系统中的所有进程。我曾经使用shell命令“ps”和系统函数来获得结果。但是,它似乎有点复杂。如何使用UNIX C函数来完成这项工作。如何使用UNIX-C/C++列出所有正在运行的进程
1
A
回答
2
在Linux下,您可以检查伪文件系统/proc
以获取进程信息。这意味着使用opendir()
函数集并查找数字的子目录 - 这些是系统上运行的每个进程的进程标识符。每个子目录中都有很多文件,只要您的进程具有所需的权限,就可以使用open()/read()
打开和读取这些文件。
见
PROC(5)
联机帮助页提供给你的信息更多的细节。
0
您只需要列出/proc/
目录=)我的question可能对您有些帮助。
0
没有找到过程信息的标准;每个Unix供应商都可以提供自己的机制来为系统管理员提供信息。
Linux和Solaris使用/proc/
文件系统将进程信息导出到用户空间,但我认为它们完全不兼容。 (我有一个模糊的回忆,Solaris决定以二进制格式导出其所有信息以删除内核中的处理,代价是将用户空间程序更紧密地绑定到内核数据结构上。top
程序曾经非常擅长窥视内核内存中读取进程表,我不知道它需要更多的,但也许所有的历史知识是在仍然出炉。)
如果你想成为特定于平台的,在Linux proc(5)
帮助页的信息,您需要。快乐的黑客攻击。 :)
0
从ps的手册页我读了,您可以使用ps -e
列出标准格式的所有进程,并使用ps ax
列出所有BSD格式的进程。
希望有所帮助。
1
这是一个完成解决方案。
见https://sourceforge.net/p/readproc/code/ci/master/tree/
克隆使用Git,做你想要什么。
#include"read_proc.h"
int main(void)
{
struct Root * root=read_proc();
struct Job * buffer;
int i=0;
for(;i<root->len;i++)
{
buffer=get_from_place(root,i);
printf("%s\t%u\n",buffer->name,buffer->pid);
}
return 0;
}
1
PSis the standard,是好还是坏。它有许多低估的格式化选项,可以简化您的跨平台输出分析。
/proc
更方便,但不便于携带,并在本地甚至在支持可能不可用(例如,在的chroot环境)。
在Unix上没有*文件夹*这样的东西。 – tchrist 2011-01-30 16:18:24
@tchrist,请详细说明 – shybovycha 2011-01-30 16:23:36
Unix有目录,而不是文件夹。文件夹听起来像婴儿对我们说话。 – tchrist 2011-01-30 16:30:33