进程的概念
进程是一个具有独立功能的程序关于某个数据集合的一次可以并发执行的运行活动,是处于活动状态的计算机程序。进程作为构成系统的基本细胞,不仅是系统内部独立运行的实体,而且是独立竞争资源的基本实体。
-------------------------------------------------------------------------------------------------
进程的属性
进程的定义:一个进程是一个程序的一次执行的过程;程序是静态的,它是一些保存在磁盘上的可执行的代码和数据集合;进程是一个动态的概念,它是Linux系统的基本的调度单位;一个进程由如下元素组成:
程序读取的上下文,它表示程序读取执行的状态。
程序当前执行的目录。
程序服务的文件和目录。
程序访问的权限。
内存和其他分配给进程的系统资源。
Linux进程中最知名的属性就是它的进程号(Process Idenity Number,PID)和它的父进程号(Parent Process ID,PPID)。
PID、PPID都是非零正整数。一个PID唯一地标识一个进程。
一个进程创建新进程称为创建了子进程(Child Process)。相反地,创建子进程的进程称为父进程。
所有进程追溯其祖先最终都会落到进程号为1的进程身上,这个进程叫做init进程,是内核自举后第一个启动的进程。
pstree命令
Linux提供了一条pstree命令,允许用户查看系统内正在运行的各个进程之间的继承关系。直接在命令行中输入pstree即可,程序会以树状结构方式列出系统中正在运行的各进程之间的继承关系。
-----------------------------------------------------------------------------
进程的结构
Linux中一个进程在内存里有三部分数据,就是“数据段”、“堆栈段”和“代码段”。
代码段是存放了程序代码的数据,假如机器中有数个进程运行相同的一个程序,那么它们就可以使用同一个代码段。
而数据段则存放程序的全局变量、常数及动态数据分配的数据空间。
堆栈段存放的就是子程序的返回地址、子程序的参数及程序的局部变量。堆栈段包含在进程控制块PCB(Process Control Block)中。PCB处于进程核心堆栈的底部,不需要额外分配空间。
-----------------------------------------------------------------------------
进程状态
用户状态:进程在用户状态下运行的状态。
内核状态:进程在内核状态下运行的状态。
内存中就绪:进程没有执行,但处于就绪状态,只要内核调度它,就可以执行。
内存中睡眠:进程正在睡眠并且进程存储在内存中,没有被交换到SWAP设备。
就绪且换出:进程处于就绪状态,但是必须把它换入内存,内核才能再次调度它运行。
睡眠且换出:进程正在睡眠,且被换出内存。
被抢先:进程从内核状态返回用户状态时,内核抢先于它做了上下文切换,调度了另一个进程。原先这个进程就处于被抢先状态。
创建状态:进程刚被创建。该进程存在,但既不是就绪状态,也不是睡眠状态。这个状态是除了进程0以外的所有进程的最初状态。
僵死状态(zombie):进程调用exit结束,进程不再存在,但在进程表项中仍有记录,该记录可由父进程收集。