Linux进程描述符task_struct结构体简析
来源:互联网 发布:linux scp命令目录 编辑:程序博客网 时间:2024/04/29 22:16
进程是处于执行期的程序以及它所管理的资源(如打开的文件、挂起的信号、进程状态、地址空间等等)的总称
Linux内核通过一个被称为进程描述符的task_struct结构体来管理进程,这个结构体包含了一个进程所需的所有信息。它定义在include/linux/sched.h文件中。
这个结构体中包含了很多的信息,下面就让我们来一一简单的看看这些结构体内容,对进程描述符有一个基本的理解。
进程状态
volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped */
state成员的可能取值如下
/* * Task state bitmask. NOTE! These bits are also * encoded in fs/proc/array.c: get_task_state(). * * We have two separate sets of flags: task->state * is about runnability, while task->exit_state are * about the task exiting. Confusing, but this way * modifying one set can't modify the other one by * mistake. */ #define TASK_RUNNING 0 #define TASK_INTERRUPTIBLE 1 #define TASK_UNINTERRUPTIBLE 2 #define __TASK_STOPPED 4 #define __TASK_TRACED 8/* in tsk->exit_state */ #define EXIT_DEAD 16 #define EXIT_ZOMBIE 32 #define EXIT_TRACE (EXIT_ZOMBIE | EXIT_DEAD)/* in tsk->state again */ #define TASK_DEAD 64 #define TASK_WAKEKILL 128 /** wake on signals that are deadly **/ #define TASK_WAKING 256 #define TASK_PARKED 512 #define TASK_NOLOAD 1024 #define TASK_STATE_MAX 2048 /* Convenience macros for the sake of set_task_state */#define TASK_KILLABLE (TASK_WAKEKILL | TASK_UNINTERRUPTIBLE)#define TASK_STOPPED (TASK_WAKEKILL | __TASK_STOPPED)#define TASK_TRACED (TASK_WAKEKILL | __TASK_TRACED)
上面的这些状态又分为下面的几类
5个互斥状态
state可以是5个互斥状态中的一种,系统中的进程必须处于5个状态中的一种。
这个5个状态的具体描述如下
5个互斥状态
两个附加的进程状态既可以被添加到state域中,又可以被添加到exit_state域中。只有当进程终止的时候,才会达到这两种状态.
/* task state */int exit_state;int exit_code, exit_signal;
新增睡眠状态
进程状态 TASK_UNINTERRUPTIBLE 和 TASK_INTERRUPTIBLE 都是睡眠状态
进程标识符(PID)
pid_t pid; pid_t tgid;
通过查看源代码我们发现pid_t的类型就是一个整型,每个进程在创建的时候都会返回一个进程标识符(PID),就好像一个身份证号码一样,用来唯一标识一个进程。
在CONFIG_BASE_SMALL配置为0的情况下,PID的取值范围是0到32767,即系统中的进程数最大为32768个。
进程内核栈
void *stack;
这里关于进程内核栈,专门写一篇博客,可以看过来
进程内核栈
进程标记
unsigned int flags; /* per process flags, defined below */
反应进程状态的信息,但不是运行状态,用于内核识别进程当前的状态,以备下一步操作
flags成员的可能取值如下,这些宏以PF(ProcessFlag)开头
例如PF_FORKNOEXEC 进程刚创建,但还没执行。PF_SUPERPRIV 超级用户特权。PF_DUMPCORE dumped core。PF_SIGNALED 进程被信号(signal)杀出。PF_EXITING 进程开始关闭。
表示进程亲属关系的成员
/* * pointers to (original) parent process, youngest child, younger sibling, * older sibling, respectively. (p->father can be replaced with * p->real_parent->pid) */struct task_struct __rcu *real_parent; /* real parent process */struct task_struct __rcu *parent; /* recipient of SIGCHLD, wait4() reports *//* * children/sibling forms the list of my natural children */struct list_head children; /* list of my children */struct list_head sibling; /* linkage in my parent's children list */struct task_struct *group_leader; /* threadgroup leader */
在Linux系统中,所有进程之间都有着直接或间接地联系,每个进程都有其父进程,也可能有零个或多个子进程。拥有同一父进程的所有进程具有兄弟关系。
ptrace系统调用
ptrace 提供了一种父进程可以控制子进程运行,并可以检查和改变它的核心image
Performance Event
Performance Event是一款随 Linux 内核代码一同发布和维护的性能诊断工具。这些成员用于帮助PerformanceEvent分析进程的性能问题
进程调度
优先级
用来描述进程的调度方式,调度策略
进程地址空间
内核除了管理本身的内存外,还必须管理用户空间中进程的内存,我们称这个内存为进程地址空间,也就是系统中每个用户空间进程所看到的内存
还有其他的一些
判断标志
时间
信号处理
其他
- Linux进程描述符task_struct结构体简析
- linux进程描述符—task_struct结构
- Linux进程描述符:task_struct结构体
- Linux进程描述符task_struct结构体
- Linux进程描述符:task_struct结构体
- Linux进程描述符task_struct
- Linux进程描述符task_struct结构体详解
- Linux进程描述符task_struct结构体详解
- Linux进程描述符task_struct结构体详解
- Linux进程描述符task_struct结构体详解
- linux下的进程描述符task_struct 结构体认识
- Linux进程描述符task_struct结构体详解
- 进程的task_struct结构描述
- linux进程描述符task_struct详解
- linux进程描述符task_struct详解
- 详解Linux中的进程描述符task_struct
- linux进程描述符task_struct详解
- 详解Linux中的进程描述符task_struct
- Yii控制器调用其他控制器的方法
- matlab循环读取文件(xls、txt、dat、mat)】
- CSS布局 ——从display,position, float属性谈起
- Spring的IOC原理[通俗解释一下]
- 一首小诗(自译)
- Linux进程描述符task_struct结构体简析
- Tensorflow学习系列(2)——MNIST手写识别(多层网络)
- Maven
- 拖拽原理
- 机器学习笔记(二)假设空间
- SpringBoot + Mybatis实体类属性与数据库表列名对应规则
- 【枚举】洛谷 P1218 [USACO1.5]特殊的质数肋骨 Superprime Rib
- Java运算符优先级
- php程序员该如何规划自己的人生