📄 processtree.c
字号:
#include<linux/kernel.h>
#include<linux/module.h>
#include<linux/init.h>
#include<linux/sched.h>
#include<linux/list.h>
#include<linux/proc_fs.h>
#include<asm/uaccess.h>
#define N 200
MODULE_LICENSE("GPL");
struct mytask{
int pid;
int parent_pid;
char name[16];
};
int mystrlen(char name[]){
int i;
for(i=0; i<16; i++)
if(name[i]=='\0')
break;
return i;
}
void travel(struct mytask task[], int flag[], int num, int i, int t){
int k, count = 0;
for(k=0; k<t+1; k++)
printk(" ");
printk("|-%s-",task[i].name);
flag[i] = 0;
for(k=0; k<num; k++)
if(flag[k] && task[k].parent_pid == task[i].pid){
count++;
printk("\n");
travel(task, flag, num, k, t+mystrlen(task[i].name)+2);
}
if(count == 0)
printk("\b");
}
static int processtree_init(void){
struct task_struct *p;
struct mytask mytask[N];
int i = 0, j, flag[N];
for(j=0; j<N; j++)
flag[j] = 1;
for_each_process(p){
if((p->pid)>0){
mytask[i].pid = p->pid;
mytask[i].parent_pid = p->parent->pid;
for(j=0; j<16; j++)
mytask[i].name[j] = p->comm[j];
i++;
}
}
travel(mytask, flag, i, 0, 0);
return 0;
}
static void processtree_cleanup(void)
{
}
module_init(processtree_init);
module_exit(processtree_cleanup);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -