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

嵌入式day25

进程线程

多任务编程

1、进程

2、线程

进程(process)

进行中的程序 --- 正在运行中的程序

进程 --- 程序的一次执行的过程

进程 是程序的一个实例

进程是跑起来的程序

一个程序可以对应多个进程

程序 静态 硬盘

进程 动态 内存

为什么需要进程?

-为了描述和管理程序运行的动态过程

操作系统为了管理程序的动态运行过程,引入了进程

PCB(Process control block)进程控制块

进程的组成

程序的构成:.c // 程序源代码

a.out // 可执行程序

程序 = 代码 + 数据

标准 c程序 在内存中布局 //C标准规定的

linux下程序在内存中的典型布局:

堆(动态区)(a.out执行后才产生)

————

bss(未初始化的全局变量)

data(已初始化的全局变量)

text

进程 = PCB + 进程实体(text | data | bss | 堆栈)

PID // Process ID // 进程的id号

S // stauts // 进程状态

进程的生命周期

man ps 查询当前进行状态

ps aux | grep 程序名 //主要查看某个儿进程的pid号及信息

eg:ps aux | grep a.out //查看a.out

ps -elf | grep 程序名 //主要查看 父子进程 包含PID PPID // parent pid

eg:ps -elf | grep a.out //查看a.out

pstree -sp pid号 //用途 查看父子进程间的关系(以树状图的方式展现 包含pid号)

kill //杀死 --- 给进程发信号

killall //可以指定 进程 名称 这种方式发送信号

eg:kill -9 a.out

进程编程

进程 ---为了实现多任务

//1.创建进程

//2.进程的执行

//3.进程结束

//4.进程结束时资源回收 --- 僵尸态

进程的创建

fork

创建一个进程(child process 子进程)

通过复制 调用进程 复制的子进程

返回值:

成功 在父进程中 返回了 子进程的pid号

在子进程中 返回了 0

失败 -1 并且没有 子进程被创建

注意:

pid号实际上是一个非负整数,最小的pid号为1

32位的平台 每个进程拥有独立的4G 内存空间(虚拟的)

每个进程运行在各自的独立空间

父子进程间,数据相互独立,不受影响

父子进程运行的顺序不确定,取决于操作系统 ---先调度谁

n个fork同时前后运行:

一共2的n次方个进程,新生成2的n次方-1个进程

fork&&fork||fork:

-------------------------

嵌入式学习第二十五天,今天学习了新的内容,进程 的相关知识。进程就是正在运行中的程序,进程是静态的。也学习了一些关于查询linux系统进程的一些命令,还有创建进程的函数fork。后面的进程学习将会持续一周,继续加油!

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • SAP与网易大数据系统集成案例
  • C++实现单例模式/工厂模式
  • 质量管理理论(至简)
  • Latex或者word里面mathtype类型的数学公式如何变成mathematica里面的形式
  • 学习笔记--算法(双指针)7
  • 控制反转(IOC)VS 依赖注入(DI)
  • Go 语言常量 6
  • 反射---Java
  • 达梦数据库的系统视图v$sql_stat
  • Element-UI自学实践
  • 【数据库】MySql深度分页SQL查询优化
  • 前端JS总结(下)之DOM
  • LVS原理——详细介绍
  • dos 常用命令整理
  • 微信小程序的广告变现收益怎么样?
  • Brief introduction of how to 'Call, Apply and Bind'
  • python docx文档转html页面
  • Shell编程
  • SpiderData 2019年2月23日 DApp数据排行榜
  • vuex 笔记整理
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 多线程 start 和 run 方法到底有什么区别?
  • 数据仓库的几种建模方法
  • 数组的操作
  • 第二十章:异步和文件I/O.(二十三)
  • ​1:1公有云能力整体输出,腾讯云“七剑”下云端
  • ​Java基础复习笔记 第16章:网络编程
  • ​软考-高级-信息系统项目管理师教程 第四版【第19章-配置与变更管理-思维导图】​
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • $(selector).each()和$.each()的区别
  • ${factoryList }后面有空格不影响
  • (1)(1.11) SiK Radio v2(一)
  • (1)Nginx简介和安装教程
  • (C语言)二分查找 超详细
  • (汇总)os模块以及shutil模块对文件的操作
  • (三)Kafka 监控之 Streams 监控(Streams Monitoring)和其他
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • (推荐)叮当——中文语音对话机器人
  • (微服务实战)预付卡平台支付交易系统卡充值业务流程设计
  • (循环依赖问题)学习spring的第九天
  • .Net 6.0--通用帮助类--FileHelper
  • .net 生成二级域名
  • .NET/C# 将一个命令行参数字符串转换为命令行参数数组 args
  • .NET/C# 使用 #if 和 Conditional 特性来按条件编译代码的不同原理和适用场景
  • .NET命名规范和开发约定
  • .NET企业级应用架构设计系列之开场白
  • .vue文件怎么使用_vue调试工具vue-devtools的安装
  • .w文件怎么转成html文件,使用pandoc进行Word与Markdown文件转化
  • ;号自动换行
  • ??eclipse的安装配置问题!??
  • ?php echo ?,?php echo Hello world!;?
  • @RequestBody与@ResponseBody的使用
  • [ vulhub漏洞复现篇 ] struts2远程代码执行漏洞 S2-005 (CVE-2010-1870)
  • [ 网络基础篇 ] MAP 迈普交换机常用命令详解