Linux内核中,进程描述符关于当前进程集合的定义如下:
struct task_struct {
volatile long state; 当前进程状态
....
struct list_head tasks;
}
list_head的定义如下:
struct list_head {
struct list_head *next,*prev;
}
下面来看一下具体的过程:
struct task_struct *p = current; //current是内核中指向当前task的指针
由此我们可以通过 p->task.next或是p->task.prev来遍历list_head。
如何从list_head再获得task_struct的指针,需要list_entry()函数来处理。
list_entry的定义
/**
*list_entry get the struct of this entry
*ptr: the struct list_head pointer
*type: the type of the struct this is embedded in
*member: the name of the list_struct within the struct
*/
#define list_entry(ptr,type,member) container_of(ptr,type,member)
使用方式如下:
list_entry((p)->tasks.next,struct task_struct,tasks)
通过这种方式实现对当前进程的遍历。
阅读(3135) | 评论(0) | 转发(0) |