【嵌入式修炼:Linux系统编程篇】——进程

一、进程

1.定义:

在Linux系统编程中,进程(Process) 是一个正在执行的程序的实例。它是操作系统进行资源分配和调度的基本单位。进程的出现是为了实现多任务,宏观上看是并行,但是微观上看还是串行的

2.进程 VS 程序:

  • 程序:静态的、存储在磁盘上的可执行文件

  • 进程:动态的、正在执行的程序实例,拥有独立的内存空间和系统资源

3.进程的特性:

  • 独立性:每个进程有独立的地址空间

  • 并发性:多个进程可以同时运行(并发/并行)

  • 动态性:有创建、运行、阻塞、终止等生命周期

  • 异步性:进程按各自独立、不可预知的速度前进

二、进程的组成

1.进程控制块(PCB)

是操作系统用来描述进程的各种信息的数据结构,它包含了进程的标识符、状态、优先级、CPU 寄存器信息、内存管理信息等。PCB 是进程存在的唯一标志,操作系统通过 PCB 来感知和控制进程。(Linux中为task_struct)

2.进程地址空间:分为多个段

1)代码段(text):可执行指令

2)数据段:

  • 已初始化数据段(.date)
  • 未初始化数据段(.bss)
  • 只读数据段(.rodate)

3)堆(heap):动态分配的内存

4)栈(stack):函数调用和局部变量

三、进程的状态

进程的生命周期------从无到有再到无

  • 生命周期:描述进程从创建到消亡的完整过程(宏观视角)

  • 状态:描述进程在某个具体时刻的行为特征(微观视角)

1.进程的五个基本状态:

新建、就绪、执行、阻塞、终止

2.Linux内核中进程状态的具体转换关系

3.ps命令中进程状态码的官方说明

四、进程的相关命令

1.top

动态查看进程的信息:pid号、进程的状态信息、进程名等等

2.ps aux | grep a.out

查看进程快照,可以查看进程的pid号和状态信息。(a.out为可执行文件名,根据实际情况替换)

3.kill

发信号

  1. kill -l :查看所有信号

2)kil -命令编号 进程pid号 :向指定进程执行指定指令

18------SIGCONT (signal continue,继续进程)

19------SIGSTOP (signal stop,暂停进程)

9------杀死进程

4.killall

Linux/Unix 系统中用于按进程名发送信号的命令。它可以根据进程名称(而不是进程ID)向多个进程发送信号

5.pstree -sp pid号

显示指定进程的完整进程树路径,包括所有父进程

6.ps -eLf | grep a.out

查找名为 a.out 的进程及其所有线程的详细信息。

五、进程的使用

  • 创建好进程之后,做与父进程类似的事情
  • 创建好进程之后,做与父进程不同的事情

1.进程的创建

(1)格式:
cs 复制代码
#include <sys/types.h>
#include <unistd.h>

pid_t fork(void);

1)功能:创建进程(通过复制 调用进程(父进程)创建新进程(子进程)

2)参数:void

3)返回值:

成功:父进程 返回 子进程的pid,子进程返回0

失败:返回-1

补充:pid 的最小值为-1

cs 复制代码
//判断父进程
if (pid > 0)
{ }
cs 复制代码
//判断子进程
if (pid == 0)
{  }
(2)注意:
  • fork之后父进程和子进程的运行顺序是不确定的,最终顺序取决于操作系统的调度
  • fork之后,父子进程各自拥有自己独立的4G进程空间。因为父子进程的空间独立,所以数据之间没有相互影响,进程安全性可靠性高
  • fork成功后,父子进程都是从fork的下一句开始执行的

(3)练习

1)一次fork生成几个进程?她们之间有什么关系?

一次 fork() 调用会生成 2 个进程:原有的父进程和新创建的子进程

2)如果两次fork同时前后执行,会生成几个进程?

会生成3个新进程:两个子进程,一个孙进程。加上调用进程就有四个进程

3)fork()&&fork()||fork() 总共几个进程?

总共5个进程

4)从键盘输入一个n,要求创建n个子进程

5)创建四个子进程,假设四个子进程分别复制无人机的 do_fiy,do_video,do_transmit,do_store四种工作模式

6)通过fork创建一个子进程,分别尝试杀死父/子进程,观察子/父进程的状态

2.进程的运行

3.进程退出

4.资源回收

相关推荐
安科士andxe4 小时前
深入解析|安科士1.25G CWDM SFP光模块核心技术,破解中长距离传输痛点
服务器·网络·5g
小白同学_C7 小时前
Lab4-Lab: traps && MIT6.1810操作系统工程【持续更新】 _
linux·c/c++·操作系统os
今天只学一颗糖7 小时前
1、《深入理解计算机系统》--计算机系统介绍
linux·笔记·学习·系统架构
2601_949146537 小时前
Shell语音通知接口使用指南:运维自动化中的语音告警集成方案
运维·自动化
儒雅的晴天7 小时前
大模型幻觉问题
运维·服务器
Gofarlic_OMS8 小时前
科学计算领域MATLAB许可证管理工具对比推荐
运维·开发语言·算法·matlab·自动化
通信大师8 小时前
深度解析PCC策略计费控制:核心网产品与应用价值
运维·服务器·网络·5g
dixiuapp8 小时前
智能工单系统如何选,实现自动化与预测性维护
运维·自动化
不做无法实现的梦~8 小时前
ros2实现路径规划---nav2部分
linux·stm32·嵌入式硬件·机器人·自动驾驶
Elastic 中国社区官方博客8 小时前
如何防御你的 RAG 系统免受上下文投毒攻击
大数据·运维·人工智能·elasticsearch·搜索引擎·ai·全文检索