4,441
社区成员
发帖
与我相关
我的任务
分享
int sys_ptreecall(struct prinfo __user *buf, int nr)
{
n=0;
struct prinfo buff[nr];
printk("%d\n",sizeof(buff));
struct task_struct *p,*tmp;
read_lock(&tasklist_lock);
int j;
p=&init_task;
for_each_process(p)
{
buff[p->pid].pid=p->pid;
printk("%d\t",buff[p->pid].pid);
j=0;
for(;j<16;j++)
{
if(p->comm[j] == '\0')
{
buff[p->pid].comm[j] = '\0';
break;
}
else
buff[p->pid].comm[j] = p->comm[j];
}
printk("%s\t",&(buff[p->pid].comm));
buff[p->pid].state=p->state;
printk("%d\t",buff[p->pid].state);
buff[p->pid].parent_pid=p->parent->pid;
printk("%d\n",buff[p->pid].parent_pid);
tmp=list_entry(p,struct task_struct,children);
buff[p->pid].first_child_pid=tmp->pid;
tmp=list_entry(p,struct task_struct,sibling);
buff[p->pid].next_sibling_pid=tmp->pid;
buff[p->pid].uid=p->cred->uid;
//p=next_task(p);
}
read_unlock(&tasklist_lock);
//printk("success unlock\n");
//traverse(buf,1);
if(copy_to_user((struct prinfo *)buf,buff,sizeof(buff)))
{
printk("fail\n");
return 0;
}
return 0;
}