1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
| #include<linux/init.h> #include<linux/module.h> #include<linux/kernel.h> #include<linux/pid.h> #include<linux/types.h> #include<linux/sched.h> #include<linux/list.h> #include<linux/moduleparam.h>
static int pid; module_param(pid,int ,0644);
static int print_fml_init(void) { struct pid* npid; struct task_struct* task; struct task_struct* parent; struct task_struct* children; struct task_struct* nsibling; struct list_head* p;
npid=find_get_pid(pid); task=pid_task(npid,PIDTYPE_PID); printk(" mod1_1 start\n");
printk("Parent:\n"); parent=task->parent; printk("%s\t %d\t %d\n",parent->comm,parent->pid,parent->__state);
printk("Sibling:\n"); list_for_each(p,&(task->sibling)){ if(p!=&(task->parent->children)){ nsibling=list_entry(p,struct task_struct,sibling); printk("%s\t %d\t %d\n",nsibling->comm,nsibling->pid,nsibling->__state); } }
printk("Children:\n"); list_for_each(p,&(task->children)){ children=list_entry(p,struct task_struct,sibling); printk("%s\t %d\t %d\n",children->comm,children->pid,children->__state); } return 0; }
static void print_fml_exit(void){ printk("mod1_1 exit\n"); }
module_init(print_fml_init); module_exit(print_fml_exit);
MODULE_LICENSE("GPL");
|