1.进程的定义
(1)程序 程序(program)是一个普通文件,是为了完成特定任务而准备好的指令序列与数据的集合,这些指令和数据以”可执行映像”的格式保存在磁盘中。
正如我们所写的一些代码,经过编译器编译后,就会生成对应的可执行文件,那么这个就是程序,或者称之为可执行程序
(2)进程 进程(process)则是程序执行的具体实例,比如一个可执行文件,在执行的时候,它就是一个进程,直到该程序执行完毕。
进程实体由数据段,程序段,进程控制块PCB(Process Control Block)组成
进程的特征
进程和程序的区别和联系
区别:
1.进程是动态的;程序是静态的
程序只是一系列指令序列与数据的集合,它本身没有任何运行的含义,它只是一个静
态的实体。
而进程则不同,它是程序在某个数据集上的执行过程,它是一个动态运行的实体,有
自己的生命周期,它因启动而产生,因调度而运行,因等待资源或事件而被处于等待
状态,因完成任务而被销毁。
2.进程有独立性,能并发执行; 程序不能并发执行
3.组成不同。进程包含PCB、程序段、数据段。程序包含数据和指令代码
4.程序是一个包含了所有指令和数据的静态实体。本身除占用磁盘的存储空间外,并
不占用系统如CPU、内存等运行资源。
进程由程序段、数据段和PCB构成,会占用系统如CPU、内存等运行资源
5.二者无一一对应关系
进程和程序并不是一一对应的,一个程序执行在不同的数据集上运行就会成为不同的
进程,可以用进程控制块来唯一地标识系统中的每个进程。而这一点正是程序无法做
到的,由于程序没有和数据产生直接的联系,既使是执行不同的数据的程序,他们的
指令的集合依然是一样的,所以无法唯一地标识出这些运行于不同数据集上的程序。
一般来说,一个进程肯定有一个与之对应的程序,而且有且只有一个。而一个程序有
可能没有与之对应的进程(因为这个程序没有被运行),也有可能有多个进程与之对
应(这个程序可能运行在多个不同的数据集上)。
联系:进程不能脱离具体程序而虚设, 程序规定了相应进程所要完成的动作
2.进程相关术语
在 Linux 中是通过检查表记录与进程相关的信息的,进程表就是一个数据结构,它把当前加载在内存中的所有进程的有关信息保存在一个表中,其中包括进程的 PID、进程的状态、命令字符串和其他一些 ps 命令输出的各类信息。操作系统通过进程的 ID 对它们进行管理,这些 PID 是进程表的索引
查看进程: ps –aux 目前在系统上运行的所有进程 pstree 将进程以树状关系列出来
(1)进程 ID Linux 系统中的每个进程都都会被分配一个唯一的数字编号,我们称之为进程 ID(ProcessID,通常也被简称为 PID)。
进程 ID 是一个 16 位的正整数,默认取值范围是从 2 到 32768(PID 数字为 1 的值一般是为特殊进程 init 保留,即系统在运行时就存在的第一个进程, init 进程负责管理其他进程),由 Linux 在启动新进程的时候自动依次分配,当进程被启动时,系统将按顺序选择下一个未被使用的数字作为它的 PID
(2)父进程 ID 任何进程(除 init 进程)都是由另一个进程启动,该进程称为被启动进程的父进程,被启动的进程称为子进程, 父进程的进程号(PID)即为子进程的父进程号(PPID)。用户可以通过调用 getppid() 函数来获得当前进程的父进程号
进程启动时,启动进程是新进程的父进程,新进程是启动进程的子进程 每个进程都有一个父进程(除了系统中如“僵尸进程”这种特殊进程外) 可以把 Linux中的进程结构想象成一个树状结构,其中 init 进程就是树的“根”;或者可以把 init 进程看作为操作系统的进程管理器,它是其他所有进程的祖先进程。我们将要看到的其他系统进程要么是由init 进程启动的,要么是由被 init 进程启动的其他进程启动的
(3)PCB
|