码迷,mamicode.com
首页 > 系统相关 > 详细

Linux 进程描述符 task struct

时间:2016-06-01 06:59:54      阅读:158      评论:0      收藏:0      [点我收藏+]

标签:linux   结构体   优先级   


大家都知道进程,可是知道linux是怎么管理其进程的吗?每一个进程都有一个进程描述符,具体是task_struct结构体存储相关的信息,在linux/sched.h文件里定义,那么我们先看看linux内核3.0版本的task_struct结构体的定义吧(删除了不必要的字段,只保留了重要的字段)。同时欢迎大家转载和交流。
struct task_struct {
 
 
 
//这个是进程的运行时状态,-1代表不可运行,0代表可运行,>0代表已停止。
 volatile longstate;
 
 
 
 /*
 
flags是进程当前的状态标志,具体的如:
 
0x00000002表示进程正在被创建;
 
0x00000004表示进程正准备退出;
 
0x00000040 表示此进程被fork出,但是并没有执行exec;
 
0x00000400表示此进程由于其他进程发送相关信号而被杀死 。
 
*/
 
 unsigned intflags;
 
 
 
//表示此进程的运行优先级
 
 unsigned intrt_priority;
 
 
 
//这里出现了list_head结构体,详情请参考
 
 structlist_head tasks;
 
 
 
//这里出现了mm_struct 结构体,该结构体记录了进程内存使用的相关情况,详情请参考
 
 structmm_struct *mm;
 
 
 
/* 接下来是进程的一些状态参数*/
 int exit_state;
 int exit_code,exit_signal;
 
 
//这个是进程号
 
 pid_t pid;
 
 
 
//这个是进程组号
 pid_t tgid;
 
 
 
//real_parent是该进程的”亲生父亲“,不管其是否被“寄养”。
 
 structtask_struct *real_parent;
 
 
 
//parent是该进程现在的父进程,有可能是”继父“
 structtask_struct *parent;
 
 
 
//这里children指的是该进程孩子的链表,可以得到所有孩子的进程描述符,但是需使用list_for_each和list_entry,list_entry其实直接使用了container_of,详情请参考
 struct list_headchildren;
 
 
 
//同理,sibling该进程兄弟的链表,也就是其父亲的所有孩子的链表。用法与children相似。
 
 structlist_head sibling;
 
 
 
//这个是主线程的进程描述符,也许你会奇怪,为什么线程用进程描述符表示,因为linux并没有单独实现线程的相关结构体,只是用一个进程来代替线程,然后对其做一些特殊的处理。
 
 structtask_struct *group_leader;
 
 
 
//这个是该进程所有线程的链表。
 
 structlist_head thread_group;
 
 
 
//顾名思义,这个是该进程使用cpu时间的信息,utime是在用户态下执行的时间,stime是在内核态下执行的时间。
 
 cputime_tutime, stime;
 
 
 
//下面的是启动的时间,只是时间基准不一样。
 structtimespec start_time;  
 
 structtimespec real_start_time;
 
 
 
//comm是保存该进程名字的字符数组,长度最长为15,因为TASK_COMM_LEN为16。
 
 charcomm[TASK_COMM_LEN];
 
 
 
/* 文件系统信息计数*/
 intlink_count, total_link_count;
 
 
 
/*该进程在特定CPU下的状态*/
 structthread_struct thread;
 
 
/* 文件系统相关信息结构体*/
 structfs_struct *fs;
 
 
/* 打开的文件相关信息结构体*/
 structfiles_struct *files;
 
 
 
 /* 信号相关信息的句柄*/
 structsignal_struct *signal;
 structsighand_struct *sighand;
 
 
 
 
 /*这些是松弛时间值,用来规定select()和poll()的超时时间,单位是纳秒nanoseconds  */
 unsigned longtimer_slack_ns;
 unsigned longdefault_timer_slack_ns;
 
};



本文出自 “写的质量还是低” 博客,转载请与作者联系!

Linux 进程描述符 task struct

标签:linux   结构体   优先级   

原文地址:http://10324228.blog.51cto.com/10314228/1784976

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!