我是模块编程的新手,我需要进行系统调用以检索系统进程并显示他们消耗了多少CPU。
我该如何打电话?
答案 0 :(得分:12)
为什么你为此实现系统调用?您不希望将syscall添加到现有Linux API。这是用户空间的主要Linux接口,没有人接触系统调用,除了知道他们做什么的顶级内核开发人员。
如果要获取进程列表及其参数和实时状态,请使用/proc
。其中包含整数的每个目录都有一个现有的进程ID,并包含一组有用的动态文件ps
,top
和其他人用来打印输出。
如果要获取内核中的进程列表(例如,在模块中),您应该知道进程在内部保存为以init
进程开头的双向链表(符号{{ 1}}在内核中)。您应该使用init_task
中定义的宏来获取进程。这是一个例子:
include/linux/sched.h
收集信息应该没问题。但是,除非你真的知道你在做什么(这需要更多的阅读),否则不要在那里做任何改变。
答案 1 :(得分:1)
有一些系统调用,称为打开和读取。所有进程的信息都保存在/proc/{pid}
目录中。您可以通过阅读相应的文件来收集过程信息。
此处有更多解释:http://www.tldp.org/LDP/Linux-Filesystem-Hierarchy/html/proc.html