Linux教程:Linux进程的基础

来源:互联网 发布:锦衣卫 知乎 编辑:程序博客网 时间:2024/06/16 09:36
 

Linux教程:Linux进程的基础

4.1  Linux进程的基础

4.1.1  进程的基本概念

程序是为了完成某种任务而设计的软件,比如vi是程序。什么是进程呢?进程就是运行中的程序。一个运行着的程序,可能有多个进程。比如Web服务器是Apache服务器,当管理员启动服务后,可能会有好多人来访问,也就是说许多用户同时请求httpd服务,Apache服务器将会创建多个httpd进程来对其进行服务。

首先我们看看进程的定义。进程是一个具有独立功能的程序关于某个数据集合的一次可以并发执行的运行活动,是处于活动状态的计算机程序。进程作为构成系统的基本细胞,不仅是系统内部独立运行的实体,而且是独立竞争资源的基本实体。了解进程的本质,对于理解、描述和设计操作系统有着极为重要的意义。了解进程的活动、状态,也有利于编制复杂程序。

4.1.2  进程的属性

进程的定义:一个进程是一个程序的一次执行的过程;程序是静态的,它是一些保存在磁盘上的可执行的代码和数据集合;进程是一个动态的概念,它是Linux系统的基本的调度单位;一个进程由如下元素组成:

 程序读取的上下文,它表示程序读取执行的状态。

 程序当前执行的目录。

 程序服务的文件和目录。

 程序访问的权限。

 内存和其他分配给进程的系统资源。

Linux进程中最知名的属性就是它的进程号(Process Idenity Number,PID)和它的父进程号(Parent Process ID,PPID)。PID、PPID都是非零正整数。一个PID唯一地标识一个进程。一个进程创建新进程称为创建了子进程(Child Process)。相反地,创建子进程的进程称为父进程。所有进程追溯其祖先最终都会落到进程号为1的进程身上,这个进程叫做init进程,是内核自举后第一个启动的进程。init进程扮演终结父进程的角色。因为init进程永远不会被终止,所以系统总是可以确信它的存在,并在必要的时候以它为参照。如果某个进程在它衍生出来的全部子进程结束之前被终止,就会出现必须以init为参照的情况。此时那些失去了父进程的子进程就都会以init作为它们的父进程。如果执行一下ps-af命令,可以列出许多父进程ID为1的进程来。Linux提供了一条pstree命令,允许用户查看系统内正在运行的各个进程之间的继承关系。直接在命令行中输入pstree即可,程序会以树状结构方式列出系统中正在运行的各进程之间的继承关系。

4.1.3  理解Linux下进程的结构

Linux中一个进程在内存里有三部分数据,就是“数据段”、“堆栈段”和“代码段”。基于I386兼容的中央处理器,都有上述三种段寄存器,以方便操作系统的运行,如图4-1所示。

图4-1

代码段是存放了程序代码的数据,假如机器中有数个进程运行相同的一个程序,那么它们就可以使用同一个代码段。而数据段则存放程序的全局变量、常数及动态数据分配的数据空间。堆栈段存放的就是子程序的返回地址、子程序的参数及程序的局部变量。堆栈段包含在进程控制块PCB(Process Control Block)中。PCB处于进程核心堆栈的底部,不需要额外分配空间。

原创粉丝点击