一、进程的定义
一个进程就是一个正在执行程序的实例,由控制线程和地址空间组成。控制线程包括运行代码、数据段和堆栈段,地址空间就是一个进程所能访问到的内存地址的集合。为了方便管理,操作系统往往将一个进程用一个结构描述,有关进程的所有信息都放在这个结构里。例如在Linux系统里的,这样的结构就是task_struct。这个结构通常很大,因为进程的所有信息都在这个结构里,包括状态、性质、资源、和组织等几大类。通常情况下访问一个进程就是访问这一个结构体。例如要知道一个进程的运行状态就可以读取其中关于状态的成员。
二、多道程序设计
所谓多道程序设计是指:内存中同一时间里存在多个程序,CPU通过在各个程序间快速切换以达到同时运行的效果。
三、进程的创建
无论进程是谁何时何地创建的,其本质都是:由一个已经存在的进程通过调用创建进程的系统调用创建的。而在Linux 系统中,“创建”意味着复制,复制已有的进程的地址空间,然后修改一部分内容(如PID、父进程的PID等)就成为一个全新的进程。
四、进程的终止
进程的终止分为正常终止和异常终止。
正常终止:1)、进程运行结束,遇到exit()函数或者在main函数里调用return,后者虽然没有直接调用exit函 数,但是gcc编译器会在其代码最后加上exit函数。
2)、程序在运行时出现错误,引起其功能没能正常执行,如执行:gcc foo.c,gcc发现foo.c 不存 在,进程便终止,这种中指方式仍属于正常终止。
异常终止:1)、执行了程序中的错误指令,如执行非法指令、访问非法地址等,进程会终止。
2)、被其他进程”杀死“,如Linux系统中,一个进程可以向其他进程发出kill信号,内核会将相应的进程终止。
五、进程的层次结构
进程是有一定的层次结构的,当父进程创建了子进程以后,子进程便会和父进程共同存在,此时子进程再创建其他子进程,形成子子孙孙的结构。例如在Linux系统中,一个特殊的进程init(PID=0) 被内核创建,当init进程被创建以后,它便开始创建一系列的进程完成对系统的初始化。init 进程读入一个说明终端数量的文件,然后为每个终端创建一个新的进程,这些进程等待用户登入,一旦某个终端有用户登录,该登录进程就启动一个shell,读取shell 启动脚本,这些脚本里的每条命令都会使得shell创建一个进程,并执行该命令。这样就形成了以init 为树根的树状进程结构,我怕们称之为“进程树”。
======待续=========