打印进程号(pid)

  我们知道linux是模块化的内核。实现模块、利用kernel提供的接口,

首先了解写模块的基本框架。下面的c文件就是最基本的框架,

当然还有怎样添加一些符号变量,利用的module_param,没用上。

  c文件printPid.c

 1 #include <linux/kernel.h>
 2 #include <linux/module.h>
 3 #include <linux/init.h>
 4 #include <linux/sched.h>
 5 #include <linux/list.h>
 6 
 7 static __init int printPid(void) //安装模块函数
 8 {
 9     struct task_struct *task,*p;
10     struct list_head *ps;
11     int count=0;
12     printk("begin.\n");
13     task=&init_task;
14     list_for_each(ps,&task->tasks)
15     {
16         p=list_entry(ps,struct task_struct,tasks);
17         count++;
18         printk("%d\t%s\n",p->pid,p->comm);
19     }
20     printk("Process counts:%d\n",count);
21     return 0;
22 }
23 static __exit void exitPid(void)  //卸载函数
24 {
25     printk("exit!\n");
26 }
27 module_init(printPid); //实现的函数必须放入其中
28 module_exit(exitPid);

makefile:

1 KDIR:=/lib/modules/$(shell uname -r)/build
2 PWD:=$(shell pwd)
3 all:
4     $(MAKE) -C $(KDIR)  M=$(PWD) modules
5 clean:
6     $(MAKE) -C $(KDIR) M=$(PWD) modules clean
7     rm -f *.o    
8 
9 obj-m   :=pid.o 

make后会生成pid.ko文件。

然后用这几个命令:

#安装模块
sudo insmod pid 

#显示日志信息
dmesg

#显示挂载的挂载的所有模块
lsmod

#卸载
sudo rmmod pid 

  这仅仅是比较简单的,kernel要学还有很长的路......

原文地址:https://www.cnblogs.com/wuchaofan/p/3003902.html