Linux系统编程之进程基础 (1)

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. 查看进程

系统命令
Windowstasklist
Linuxps/pstree/top

5.1 ps命令介绍

注意: ps命令查看的是命令查询时刻的系统进程的快照

ps命令的参数

(1) 查看单个进程

命令含义
ps -p 进程PID通过进程PID查看进程
pidof 程序名查看程序的PID

(2)查看进程

风格命令属性说明
BSD风格ps -auxa:终端上所有用户的进程;u:以用户为中心显示详细信息,x:无终端进程BSD(BerkeleySoftware Distribution,伯克利软件套件)是Unix的衍生系统,1970年代由伯克利加州大学(UniversityofCalifornia, Berkeley)开发
System V 风格ps -efe :所有进程; 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. 杀死进程

  • 不同系统杀死进程的方法
系统命令
Windowstaskkill /F /PID 进程标识 /taskkill /F /IM 程序名
Linuxkill命令
  • kill杀死进程的方法
    (1)首先使用ps -ef | grep filename 命令查询要杀死进程的PID,然后使用以下表格的命令
    (2)使用kill命令:kill -signal PID
    注意: signal可以使用信号编号,也可以使用信号名
信号编号信号名含义
0EXIT程序退出时收到该信息。
1HUP挂掉电话线或终端连接的挂起信号,这个信号也会造成某些进程在没有终止的情况下重新初始化
2INT表示结束进程,但并不是强制性的,常用的 “Ctrl+C” 组合键发出就是一个 kill -2 的信号
3QUIT退出
9KILL杀死进程,即强制结束进程
11SEGV段错误。
15TERM正常结束进程,是 kill 命令的默认信号。

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值