小默

ps lkm

pslkm.c
#include <linux/module.h>
#include 
<linux/init.h>
#include 
<linux/list.h>
#include 
<linux/sched.h>

#define METHOD 1

static int list_init(void)
{
    
struct task_struct *task, *p;
    
struct list_head *pos;

    
int count;

    
char *method;



    count 
= 0;

    p 
= NULL;

    task 
= NULL;

    method 
= NULL;

    task 
= &init_task;


    
switch(METHOD){

        
case 1:

            method 
= "list_for_each";

            
break;

        
case 2:

            method 
= "for_each_process";

            
break;

        
case 3:

            method 
= "list_for_each_entry";

            
break;

    }



    printk(
"The method is %s\n",method);


    printk(KERN_ALERT
"PID\tCOMM\n");




    
if(METHOD == 1){

        list_for_each(pos,
&task->tasks){

            p 
= list_entry(pos,struct task_struct,tasks);

            count
++;

            printk(KERN_ALERT
"%d\t%s\n",p->pid,p->comm);

        }

    }

    
else if(METHOD == 2){

        for_each_process(task){

        count
++;

        printk(KERN_ALERT
"%d\t%s\n",task->pid,task->comm);

        }

    }

    
else if(METHOD == 3){

        list_for_each_entry(p,
&task->tasks,tasks){

        count
++;

        printk(KERN_ALERT 
"%d\t%s\n",p->pid,p->comm);

        }

    }



    printk(
"系统当前共有 %d 个进程!\n",count);



    
return 0;


}



static void list_exit(void)

{

    printk(KERN_ALERT 
"GOOD BYE!\n");

}



module_init(list_init);

module_exit(list_exit);



MODULE_AUTHOR(
"...");

MODULE_LICENSE(
"GPL");


Makefile:
obj-m := pslkm.o

KERNELDIR 
?= /lib/modules/$(shell uname -r)/build

PWD :
= $(shell pwd)

all:

    make 
-C $(KERNELDIR) M=$(PWD) modules

clean:

    make 
-C $(KERNELDIR) M=$(PWD) clean


posted on 2010-06-01 20:23 小默 阅读(215) 评论(0)  编辑 收藏 引用 所属分类: Linux


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理


导航

统计

留言簿(13)

随笔分类(287)

随笔档案(289)

漏洞

搜索

积分与排名

最新评论

阅读排行榜