1. 进程与程序的关系
对于进程和程序的关系可以用以下例子来说明:
如果程序是菜谱,进程就是厨师按照菜谱烹饪的过程;
如果程序是乐谱,进程就是乐师按照乐谱进行演奏的过程;
如果程序是剑谱,进程就是剑客按照剑谱舞剑的过程;
程序是静的,进程是动的。
2. 进程与程序的区别:
进程 | 程序 |
---|---|
动态 | 静态 |
有生命周期 | 指令的集合 |
只能对应一个程序 | 可以对应多个进程 |
具有并发性 | 没有并发性 |
进程是竞争计算机资源的基本单位 | 不是基本单位 |
- 进程概念:
进程是程序的一次执行。进程是可以并行执行的计算。进程是一个程序与其使用的数据在处理机上顺序执行时发生的活动。进程是程序在一个数据集合上的运行过程。它是系统进行资源分配和调度的一个独立单位。
- 进程的本质
程序在地址空间中按照代码逻辑控制流执行
资源分配最小单位
一个独立的逻辑控制流,独占处理器------类似于机器
一个私有的地址空间,独占存储系统------类似于工厂
- 从代码到程序
将写好的代码进行编译,生成了可执行文件
- 从程序到进程
(1) 内核将程序读入内存,为程序镜像分配内存空间。
(2) 内核为该进程分配进程标志符PID(Process Identification操作系统里指进程识别号,也就是进程标识符。操作系统里每打开一个程序都会创建一个进程ID,即PID。)。
(3) 内核为该进程保存PID及相应的进程状态信息。
PCB(Processing Control Block): 进程控制块,是操作系统核心中一种数据结构,主要表示进程状态。其作用是使一个在多道程序环境下不能独立运行的程序(含数据),成为一个能独立运行的基本单位或与其它进程并发执行的进程。
- 虚拟存储器/虚拟地址空间
stack :栈,在计算机科学中是限定仅在表尾进行插入或删除操作的线性表。【储存的动态未初始化变量】
heap:堆,堆内存是区别于栈区、全局数据区和代码区的另一个内存区域。堆允许程序在运行时动态地申请某个大小的内存空间。【存储初始化的局部变量】
bss: bss段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。BSS是英文Block Started by Symbol的简称。BSS段属于静态内存分配。【存储全局未初始化的变量和静态变量】
data:数据段(data segment)通常是指用来存放程序中已初始化 的"全局变量"的一块内存区域。数据段属于静态内存分配。【存储全局已初始化的变量】
code:代码段(code segment/text segment)通常是指用来存放程序执行代码的一块内存区域。这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于 只读 , 某些架构也允许代码段为可写,即允许修改程序。在代码段中,也有可能包含一些 只读的常数变量 ,例如字符串常量等。程序段为程序代码在内存中的映射。一个程序可以在内存中多有个副本。【存储的是二进制后的程序代码】
变量 | 存储位置 |
---|---|
const修饰的局部变量及函数内部声明的局部变量 | stack |
初始化的局部变量 | heap |
未经初始化的全局变量和静态变量 | .bss |
经过初始化的全局变量和静态变 | .data |
const修饰的全局变量及字符串常量 | .text |
段名 | 组成 | 来源 |
---|---|---|
代码段 | .text | 可执行文件 |
数据段 | .data bss | 可执行文件 |
堆栈段 | heap stack | 请求 |
3. 程序格式:ELF
ELF(Executable and Linkable Format)文件格式,一种用于二进制文件、可执行文件、目标代码、共享库和核心转储格式文件。
(1)查看程序(ELF文件):readelf -S 文件名(必须是二进制文件XX.out)
(2)查看进程空间大小:size 文件名
(3)查看进程时间大小:time 文件名
(4) gdb查看内存映射信息:info proc mapping
- 进程的状态分析:进程的状态类似于播放音频或者视频的过程
4. 进程的状态分类
状态 | 含义 |
---|---|
就绪(Ready) | 进程已获得到除CPU以外的所有必要的资源,获得CPU立即执行 |
运行(Running) | 程序正在CPU上运行 |
阻塞(Blocked) | 等待某个事件发生而无法执行时,放弃CPU |
5. 查看进程
系统 | 命令 |
---|---|
Windows | tasklist |
Linux | ps/pstree/top |
5.1 ps命令介绍
注意: ps命令查看的是命令查询时刻的系统进程的快照
(1) 查看单个进程
命令 | 含义 |
---|---|
ps -p 进程PID | 通过进程PID查看进程 |
pidof 程序名 | 查看程序的PID |
(2)查看进程
风格 | 命令 | 属性 | 说明 |
---|---|---|---|
BSD风格 | ps -aux | a:终端上所有用户的进程;u:以用户为中心显示详细信息,x:无终端进程 | BSD(BerkeleySoftware Distribution,伯克利软件套件)是Unix的衍生系统,1970年代由伯克利加州大学(UniversityofCalifornia, Berkeley)开发 |
System V 风格 | ps -ef | e :所有进程; f :树状显示 | System V, 曾经也被称为AT&T SystemV,是Unix操作系统众多版本中的一支。它最初由AT&T开发。 |
(3)进程的显示信息说明
标识 | 含义 |
---|---|
USER | 用户 |
PID | 进程ID |
%CPU | 进程占用CPU的百分比 |
%MEM | 进程占用内存百分比 |
VSZ | 进程的虚拟大小 |
RSS | 常驻内存(内存中页的数量) |
TTY | 终端ID |
STAT | 进程状态 |
START | 启动进程的时间 |
TIME | 进程消耗CPU的时间 |
COMMAND | 进程对应的实际程序 |
(4)进程的状态(STAT)标识
NO | 标识符号 | 含义 |
---|---|---|
1. | D | 不可中断Uninterruptible (usually lO) |
2. | R | 正在运行,或在队列中的进程 |
3. | S | 处于休眠状态 |
4. | T | 停止或被追踪 |
5. | Z | 僵尸进程 |
6. | W | 进入内存交换(从内核2.6开始无效) |
7. | X | 死掉的进程 |
8. | < | 高优先级 |
9. | n | 低优先级 |
10. | s | 包含子进程 |
11. | + | 位于后台的进程组 |
5.2 pstree命令介绍
作用:以树状图的方式展现进程之间的派生关系。
安装:yum install psmisc
5.3 top命令介绍
作用:实时显示系统中各个进程的资源占用,类似Windows任务管理器。
注意: top查询的是实时的系统进程信息
Linux一切皆文件,在/proc/下也可以查看到进程。
6. 杀死进程
- 不同系统杀死进程的方法
系统 | 命令 |
---|---|
Windows | taskkill /F /PID 进程标识 /taskkill /F /IM 程序名 |
Linux | kill命令 |
- kill杀死进程的方法
(1)首先使用ps -ef | grep filename 命令查询要杀死进程的PID,然后使用以下表格的命令
(2)使用kill命令:kill -signal PID
注意: signal可以使用信号编号,也可以使用信号名
信号编号 | 信号名 | 含义 |
---|---|---|
0 | EXIT | 程序退出时收到该信息。 |
1 | HUP | 挂掉电话线或终端连接的挂起信号,这个信号也会造成某些进程在没有终止的情况下重新初始化 |
2 | INT | 表示结束进程,但并不是强制性的,常用的 “Ctrl+C” 组合键发出就是一个 kill -2 的信号 |
3 | QUIT | 退出 |
9 | KILL | 杀死进程,即强制结束进程 |
11 | SEGV | 段错误。 |
15 | TERM | 正常结束进程,是 kill 命令的默认信号。 |