进行系统调用以获取进程列表

时间:2013-08-23 17:42:45

标签: linux-kernel system-calls kernel-module

我是模块编程的新手,我需要进行系统调用以检索系统进程并显示他们消耗了多少CPU。

我该如何打电话?

2 个答案:

答案 0 :(得分:12)

为什么你为此实现系统调用?您不希望将syscall添加到现有Linux API。这是用户空间的主要Linux接口,没有人接触系统调用,除了知道他们做什么的顶级内核开发人员。

如果要获取进程列表及其参数和实时状态,请使用/proc。其中包含整数的每个目录都有一个现有的进程ID,并包含一组有用的动态文件pstop和其他人用来打印输出。

如果要获取内核中的进程列表(例如,在模块中),您应该知道进程在内部保存为以init进程开头的双向链表(符号{{ 1}}在内核中)。您应该使用init_task中定义的宏来获取进程。这是一个例子:

include/linux/sched.h

收集信息应该没问题。但是,除非你真的知道你在做什么(这需要更多的阅读),否则不要在那里做任何改变。

答案 1 :(得分:1)

有一些系统调用,称为打开和读取。所有进程的信息都保存在/proc/{pid}目录中。您可以通过阅读相应的文件来收集过程信息。

此处有更多解释:http://www.tldp.org/LDP/Linux-Filesystem-Hierarchy/html/proc.html