当前位置: 首页 > news >正文

Linux软件编程:进程

目录

一、基本概念

二、进程创建

1. 进程空间分布

2. 虚拟地址与物理地址

3. 多进程存储与调度

三、进程相关命令

1. top

2. ps -ef

3. ps -aux

4. 后台执行进程任务

5. jobs

6. fg

7. nice/renice

8. kill/killall

四、进程状态

五、进程相关函数接口

1.fork:创建子进程

2.getpid/getppid

3.exit与_exit

4.进程回收

1.wait

2.waitpid

六、进程消亡

1.孤儿进程

2.僵尸进程:

3.如何避免产生僵尸进程?

一、基本概念

  • 进程:程序动态执行的过程,包含创建、调度、消亡等阶段
  • 程序:存放在外存中的一段数据集合(静态)

二、进程创建

1. 进程空间分布

操作系统为每个运行的进程开辟 0-4G 虚拟内存空间,分为:

  • 内核空间:不允许用户访问
  • 用户空间
    • 文本段:存放代码和指令
    • 数据段:包含字符串常量、已初始化 / 未初始化的全局变量 / 静态变量(编译时开辟空间,程序结束回收,未初始化值为 0)
数据区存放数据特点:
  • 未经初始化值为0
  • 编译时开辟空间
  • 程序结束时回收空间
  • 系统数据段
  • 堆区:通过malloc申请、free释放(需避免内存泄露)
堆区存放数据特点:
  • malloc申请堆区空间
  • free释放堆区空间
  • 注意:避免产生内存泄露
  • 栈区:存放局部变量、函数运行数据(未初始化值为随机值,超出作用域自动回收)
栈区存放数据特点:
  • 未经初始化值为随机值
  • 执行到变量定义开辟内存空间
  • 超过变量作用域回收变量空间

2. 虚拟地址与物理地址

  • 虚拟地址:用户可见的地址,代表用户可寻址范围
  • 物理地址:内存存放数据的实际硬件地址
  • MMU(内存映射单元):负责虚拟地址与物理地址的映射

3. 多进程存储与调度

  • 存储特点:多个进程物理地址独立(空间独立),但共享虚拟内存空间
  • 调度算法
  1. 先来先执行
  2. 高优先级调度
  3. 时间片轮转调度
  • 调度本质:宏观并行(看似同时执行),微观串行(CPU 在多个任务间高速切换)
  • 宏观分析:一个CPU同时执行多个进程任务
    微观分析:一个CPU在多个任务中高速切换保障多任务执行

三、进程相关命令

命令功能关键信息
top动态查看进程信息(按 CPU、内存占用率)显示 PID(进程 ID)、USER(创建者)、PR/NI(优先级)、% CPU、% MEM 等,q退出
ps -ef查看某一时刻所有进程信息显示 UID(创建用户)、PID、PPID(父进程 ID)、CMD(进程命令);`ps -efgrep 进程名 ` 可查找特定进程
ps -aux查看某一时刻所有进程信息显示 USER、PID、% CPU、% MEM、STAT(状态)等
./a.out &后台执行进程进程在后台运行
jobs查看终端后台进程任务显示后台进程编号
fg 编号将后台进程放到前台执行需通过jobs获取进程编号
nice/renice改变进程优先级优先级范围 - 20~20(数字越小优先级越高);nice -n 优先级 进程名/renice -n 优先级 进程PID
kill/killall杀死进程kill -编号 进程PID/killall -编号 进程名kill -9 PID强制终止

1. top

示例:top
功能:根据CPU占用率和内存占用率查看当前所有进程的信息
PID:唯一区分进程的ID
USER:创建者
PR NI:优先级
VIRT
RES
SHR:资源占用
S:状态
%CPU:CPU占用率
%MEM:内存占用率
TIME+:运行的时长
COMMAND:进程命令
q退出

2. ps -ef

示例:ps -ef
功能:查看该时刻的所有进程信息
UID:创建进程的用户
PID:进程的ID
PPID:父进程的ID
C
STIME
TTY:进程依赖的终端
TIME
CMD
ps -ef | grep 进程名
查找与进程名对应的进程信息

3. ps -aux

示例:ps -aux
功能:查看该时刻的所有进程信息
USER
PID
%CPU
%MEM
VSZ
RSS
TTY
STAT:进程的状态
START TIME
COMMAND

4. 后台执行进程任务

示例:./a.out &
功能:后台执行a.out进程

5. jobs

示例:jobs
功能:查看终端下所有的后台进程任务

6. fg

示例:fg 编号(通过jobs查看)
功能:后台执行的任务放到前台执行

7. nice/renice

示例:nice -n 优先级编号 进程名
renice -n 优先级编号 进程PID
功能:改变进程的优先级
优先级范围:-20 - 20
数字越小优先级越高

8. kill/killall

示例:kill -编号 进程PID
killall -编号 进程名
功能:杀死进程任务
kill -9 PID

四、进程状态

状态标识进程状态及含义
R就绪态 / 运行态(位于 CPU 调度队列中)
S可唤醒等待态(等待资源,可被打断,资源到来后加入调度队列)
D不可唤醒等待态(等待资源,不可被打断,资源到来后加入调度队列)
T停止态(用户人为暂停)
Z僵尸态(进程结束,空间未回收)
X结束态(进程结束,空间已回收)

五、进程相关函数接口

1.fork:创建子进程

  • 功能:父进程调用后生成子进程,子进程拷贝父进程的文本段、数据段、系统数据段
  • 返回值:父进程返回子进程 PID,子进程返回 0,出错返回 - 1
  • 特点:父子进程空间独立,变量 / 数据互不影响,PID 不同
注意:
  • 子进程拷贝父进程文本段、数据段、系统数据段
  • 父进程与子进程空间独立,同一份代码中的变量和数据都会在父子进程中各有一份,父子进程
  • 修改自己空间的数据不会影响对方的空间
  • 进程的PID不一样
  • fork的返回值不一样,父进程中返回子进程的PID,子进程中返回0
  • PID:一定是 > 0

2.getpid/getppid

  • getpid()原型:pid_t getpid(void);        获取当前进程 PID
  • getppid()原型:pid_t getppid(void);         获取当前进程的父进程 PID

3.exit_exit

  • 原型:void exit(int status);
  • 功能: 结束进程任务并返回进程结束状态
  • 参数: status:进程结束状态的值
  • 原型:void _exit(int status);
  • 功能: 结束进程任务并返回进程结束状态
  • 参数: status:进程结束状态的值
注意:
  1. 在主函数中调用exitreturn功能保持一致
  2. return在函数内部将结束该函数
  3. exit在函数内部会将进程结束
  4. exit会在结束前刷新缓存区
  5. _exit不会刷新缓存区

4.进程回收

1.wait
  • 原型:pid_t wait(int *wstatus);
    功能: 回收子进程空间
    参数: wstatus:存放子进程结束状态空间的首地址
    返回值: 成功返回回收到的子进程的PID ;失败返回-1
注意:
wait具有阻塞等待功能,等到有子进程结束才会回收子进程继续向下执行
2.waitpid
  • 可指定回收特定子进程(功能更灵活)

六、进程消亡

1.孤儿进程

  • 产生:父进程先结束,子进程成为孤儿进程
  • 处理:被init进程收养

2.僵尸进程

  • 是每个进程结束必然会经历的阶段
  • 产生原因:子进程结束后,父进程未回收其空间,导致空间被占用

3.如何避免产生僵尸进程?

  • 父进程先结束,子进程会成为孤儿进程,孤儿进程被init进程收养,子进程再结束,init进程回收进程空间
  • 子进程结束,父进程回收子进程空间,避免产生僵尸进程
http://www.dtcms.com/a/331661.html

相关文章:

  • GoLand 项目从 0 到 1:第八天 ——GORM 命名策略陷阱与 Go 项目启动慢问题攻坚
  • Go 并发控制利器 ants 使用文档
  • Uniapp 中的 uni.vibrate 震动 API 使用指南
  • 4. 索引数据的增删改查
  • ATAM:基于场景的软件架构权衡分析法
  • C语言指针使用
  • 机器翻译:Hugging Face库详解
  • Qwen-Image深度解析:突破文本渲染与图像编辑的视觉革命
  • 网站突然崩了,此站点遇到了致命错误!
  • 从零开始学习:深度学习(基础入门版)(第2天)
  • RCL 2025 | LLM采样机制的新视角:来自处方性偏移的解释
  • 区块链技术原理(10)-以太坊帐户
  • ​​vdbench 存储性能测试工具​​的详细使用教程,结合安装部署、参数配置、测试执行及结果分析
  • 电池模组奇异值分解降阶模型
  • Pandas数据处理与分析实战:Pandas数据转换与处理基础课程
  • 既然是长连接 ,资源已经占用,已经存在。那抢购就直接用长连接不更好?
  • 前端八股文-HTML5篇
  • AI绘画:从算法原理解读其风格、质量与效率变革
  • RLHF综述-GRPO之前
  • 《SeeClick: Harnessing GUI Grounding for Advanced Visual GUI Agents》论文精读笔记
  • 机器学习算法篇(八)-------svm支持向量机
  • 机器人“ChatGPT 时刻”倒计时
  • 码上爬第九题【协程+webpack】
  • 苹果正计划大举进军人工智能硬件领域
  • 【wpf】WPF 中的 MouseBinding 详解
  • Node-RED系列教程-V4版本Dashboard2使用教程
  • 【科研绘图系列】R语言绘制微生物丰度和基因表达值的相关性网络图
  • 数智先锋 | 告别运维黑盒!豪鹏科技×Bonree ONE构建全栈智能可观测体系
  • Java 中导出 Excel 文件的方法
  • Java 设计模式-装饰器模式