2011-01-30 58 views

回答

2

在Linux下,您可以检查伪文件系统/proc以获取进程信息。这意味着使用opendir()函数集并查找数字的子目录 - 这些是系统上运行的每个进程的进程标识符。每个子目录中都有很多文件,只要您的进程具有所需的权限,就可以使用open()/read()打开和读取这些文件。

PROC(5)

联机帮助页提供给你的信息更多的细节。

0

您只需要列出/proc/目录=)我的question可能对您有些帮助。

+0

在Unix上没有*文件夹*这样的东西。 – tchrist 2011-01-30 16:18:24

+0

@tchrist,请详细说明 – shybovycha 2011-01-30 16:23:36

+0

Unix有目录,而不是文件夹。文件夹听起来像婴儿对我们说话。 – tchrist 2011-01-30 16:30:33

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环境)。