Linux内核中的进程信息放置在task_struct中,称为进程描述符的结构,该结构定义在<linux/sched.h>中。进程描述符能够完整的描述一个进程,博爱阔它打开的文件、进程的地址空间、挂起的信号、进程的状态等,例如
struct task_struct{
unsigned long state;
int prio;
unsigned long policy;
struct task_struct *parent;
struct list_head tasks;
pid_t pid;
......
}
其中存放了进程的所有信息,可以说是进程的一张身份证。
进程的状态
状态 | 说明 | 具体说明 |
TASK_RUNNING | 运行 | 进程是可执行的(可以随时投入执行),或者正在执行 |
TASK_INTERRUPTIBLE | 可中断 | 进程正在睡眠,等待某些条件的达成后,内核将进程设置为可执行,并唤醒随时准备投入执行 |
TASK_UNINTERRUPTIBLE | 不可中断 | 同上,但是对信号不做反应,就算接收到了唤醒的信号也不会唤醒。一般是等待某件时间很快发生或者不受干扰的时候。较少使用 |
__TASK_TRACED | 被其他进程跟踪的进程 | 例如被ptrace跟踪的进程 |
__TASK_STOPPED | 停止 | 进程没有投入执行,在手动进程停止的信号时,会进入此状态 |
进程的状态转换大致如图