文档章节

内核模块遍历进程和任务队列保存到proc文件中

陈洪波
 陈洪波
发布于 2015/05/19 19:32
字数 603
阅读 9
收藏 1

实现一个模块用它遍历当前进程的父进程和任务队列,并将遍历的结果输出到一个proc 文件中(遍历可以从 current 当前进程开始,父进程遍历到初始化进程,遍历任务队列可以利用 for_each_process 宏)。

下面是我的内核模块的实现部分:

/************************************************************ * 使用内核模块从当前进程开始先前遍历,知道找到第一个进程为止 * * 并将遍历的结果保存到proc文件中 * ***********************************************************/

#include <linux/module.h>
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/proc_fs.h>
#include <linux/jiffies.h>
#include <asm/uaccess.h>
#include <linux/moduleparam.h>
#include <linux/list.h>
#include <linux/sched.h>
#include <asm/current.h>

#define MODULE_NAME "MyProcess"
#define MYDATA_LEN 10000

//放用户空间的数据
struct my_proc_data{
    char value[MYDATA_LEN];
};

struct my_proc_data mydata,fathers_data;

//proc结构变量
struct proc_dir_entry *example_dir;

//存放任务队列
struct proc_dir_entry *date_file;

//存放父进程
struct proc_dir_entry *father_file;

static int param;
module_param(param,int,0644);

//读文件驱动函数
static int proc_read(char *page,char **start,off_t off,int count,int *eof,void *data)
{
    int len;

    struct my_proc_data *mydatap = (struct my_poroc_data *)data;

    len += sprintf(page,"%s",mydatap->value);

    return len;
}

//写文件驱动函数
static int proc_write(struct file *file,const char *