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

【Linux】详细介绍进程的概念

目录

一、初识进程概念

真正的进程概念如下:

二、Linux中PCB的操作系统学科叫法:task_struct

1、简单认识task_ struct内容分类

2、问题:操作系统怎么知道当前程序执行到哪一行代码了?

三、linux关于进程的常用指令:

1、ps axj

2、运行一个.c可执行文件

3、 ps ajx | head -1

4、man getpid

5、man getppid

6、每一次启动程序 , 当前进程的pid值都会变化

7、进程的当前工作目录:

8、函数chdir

四、初识fork:通过系统调用fork创建新进程

1、通过一段代码引出fork

2、fork的返回值

3、创建子进程的作用:

问题:上述代码中一个id变量怎么会即等于0,又大于0呐?


 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家

点击跳转到网站

一、初识进程概念

很多教材观点:

1、加载到内存的程序就叫进程;

2、正在运行的程序就叫进程;

但这些叙述是模模糊糊的,看着根本不明白进程到底是什么。下面我们逐步介绍:

事实上:程序会被编译成二进制文件,文件又是存在磁盘上,磁盘属于外设;

1、我们可以同时启动多个程序,将这多个程序加载到内存(通常是可执行程序.exe);

2、操作系统必须去管理这些加载到内存的程序,比如如何给这些程序分配内存。

3、操作系统是如何管理加载到内存的程序呐,就是我们上述所介绍的:先描述再组织。

第3点过程介绍,引出进程的概念:

操作系统刚开始将进程加载到内存的时候,它是不认识这些进程的,所以根据“先描述,后组织”,会去创建一个结构体去描述这些进程,然后把对应的属性填入结构体的成员,这样就认识了,这样操作系统就可以通过访问这些结构体间接去管理这些进程数据。

如下:

这个结构体被叫做PCB(process ctrl block:进程控制块),上述图中只是部分属性,实际中可能有几百种属性。因为我们以链表为例,所以这里是在成员中添加一个PCB的指针用于指向下一个结点,这样对进程的管理就转化为对PCB链表的增删查改,这个就是对进程的建模过程。

上述就是大致管理图,

真正的进程概念如下:

进程 = 内核PCB对象(内核数据结构) + 可执行程序

所有对进程的控制和操作,都只和进程的PCB有关,和进程的可执行程序没有关系,因为是通过访问PCB去间接管理可执行程序,我们上面只是以链表为例,实际PCB结构体可以用任意数据结构进行管理。

二、Linux中PCB的操作系统学科叫法:task_struct

1、简单认识task_ struct内容分类

(1)标示符: 描述本进程的唯一标示符,用来区别其他进程
(2)状态: 任务状态,退出代码,退出信号等。
(3)优先级: 相对于其他进程的优先级。
(4)程序计数器: 程序中即将被执行的下一条指令的地址。
(5)内存指针: 包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针
(6)上下文数据: 进程执行时处理器的寄存器中的数据[休学例子,要加图CPU,寄存器]。
(7)I/O状态信息: 包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表。
(8)记账信息: 可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等。
(9)其他信息  

2、问题:操作系统怎么知道当前程序执行到哪一行代码了?

这就是通过task_ struct的内容中程序计数器知道的。CPU中存在一个eip寄存器(也叫PC指针),实际上程序计数器就是PC指针,里面存的是当前正在执行的指令的下一条指令,那些判断、循环、函数跳转等等操作的本质就是修改PC指针,因为程序是从上往下执行的,而这些操作都会改变这个顺序,所以实际上修改的是PC指针。

三、linux关于进程的常用指令:

1、ps axj

这个指令用来查看所有进程:

2、运行一个.c可执行文件

 1 #include<stdio.h>2 #include<unistd.h>3 int main()4 {5     while(1)6     {7         printf("i am a process!\n");8         sleep(2);9     }10     return 0;11 }

如上,写了一个test。c文件,此时我们将它编译运行,如下:

此时这个程序就变成了一个进程,我们可以通过指令查看

3、 ps ajx | head -1

该指令用来显示当前系统中所有进程表头的详细信息。

但为了看见我们自己的,我们可以筛选一下,使用指令:

ps ajx | head -1 && ps ajx | grep myprocess

这样可以筛选包含myprocess关键词的内容:

这里会显示第二行内容是因为:几乎所有的独立的指令都是程序,运行起来也会变成进程,所以筛选的时候会把grep这个进程也筛选进来,如果不想看到,可以使用-v选项,反向筛选不包括grep关键词的:

ps ajx | head -1 && ps ajx | grep myprocess | grep -v grep

4、man getpid

这个指令用来查看getpid这个函数的信息:getpid就是一个系统调用,用来查看当前进程的pid值,返回值pid_t类型相当于int

5、man getppid

首先我们要知道,一般在linux中,普通进程都会有父进程,而getppid就是用来查看当前进程的父进程的pid值,man指令就是用来查看这个函数的信息。

6、每一次启动程序 , 当前进程的pid值都会变化

每一次启动程序 , 当前进程的pid值都会变化,因为每次启动程序,都会是一个新进程。

但会发现父进程始终不会变。

所以我们可以看一下父进程10645是谁?使用如图指令后,发现是进程bash。

bash就是命令行解释器,所以我们命令行启动的进程都是bash的子进程。

7、进程的当前工作目录:

在文件操作中我们知道"fopen("file.txt","w");",如果不存在这个文件,就会在当前路径下帮我们创建这个文件。这里的当前路径我们以前都认为是该.c文件所在的路径,但实际上是当前可执行程序对应的进程的工作目录(cwd):

这里的cwd就是进程的当前路径,对应的下面还有exe程序对应的路径。

8、函数chdir

四、初识fork:通过系统调用fork创建新进程

1、通过一段代码引出fork

首先我们写一段测试代码:

  1 #include<stdio.h>2 #include<unistd.h>3 #include<sys/types.h>4 int main()5 {6     printf("before fork:i am a prcess,pid:%d,ppid:%d\n",getpid(),getppid());7     pid_t id = fork();8     printf("after fork:i am a prcess,pid:%d,ppid:%d\n",getpid(),getppid());9     return 0;10 }                                                                                                                                                                       

运行结果如下:

我们会发现,我们代码中只有两个printf,但运行结果却打印了三行内容,原因就在于,当执行fork函数后,fork会创建子进程,所以此时会走两条分支,所以after的printf会打印两次,第一次打印的是父进程的内容,第二次打印的是子进程的内容,可以通过ppid看出打印顺序。

(所以可以这样理解,fork之后代码是父子进程共享的,相当于要执行两份代码)

2、fork的返回值

可以通过手册查看,发现fork的返回值如下:

如果创建失败,则返回-1;

如果创建成功,则给父进程返回子进程的pid,给子进程返回0;因为父进程可以有多个子进程,而子进程只有一个父进程,所以父进程找子进程是比较困难的,就需要一些标识符,比如这里pid。子找父是比较简单的,比如直接getppid。

3、创建子进程的作用:

一般情况,我们创建子进程是想让父子进程去做不同的事,这样的场景就可以通过一些判断语句,结合fork的返回值,就可以让父子进程做不同的事。

这段代码也是让我们第一次接触同时运行两个死循环。

创建子进程的时候,操作系统会给子进程创建一个PCB,默认情况会将父进程的大部分属性拷贝给子进程,只有一些用于标识的属性才和父进程不一样,比如pid和ppid。创建一个进程的时候,系统中就会多一个进程。

问题:上述代码中一个id变量怎么会即等于0,又大于0呐?

首先我们要知道,一个进程崩溃了,是不会影响其他进程的,也就是说进程之间是具有独立性的,并不是相互影响。我们可以通过指令去杀死对应进程。

相关文章:

【Linux】详细介绍进程的概念

目录 一、初识进程概念 真正的进程概念如下&#xff1a; 二、Linux中PCB的操作系统学科叫法&#xff1a;task_struct 1、简单认识task_ struct内容分类 2、问题&#xff1a;操作系统怎么知道当前程序执行到哪一行代码了&#xff1f; 三、linux关于进程的常用指令&#xff…...

mybatis框架补充

一&#xff0c;#{} 和${}区别 1.传数值 #{} 占位符&#xff0c;是经过预编译的&#xff0c;编译好SQL语句再取值&#xff0c;#方式能够防止sql注入 eg&#xff1a;#{}&#xff1a;delete from admin where id #{id} 结果&#xff1a; dalete from admin where id &#x…...

Alertmanager的安装和详细使用步骤总结

一、安装步骤 1. 二进制安装 下载与解压 从GitHub下载最新版本&#xff08;如v0.23.0&#xff09;&#xff1a;wget https://github.com/prometheus/alertmanager/releases/download/v0.23.0/alertmanager-0.23.0.linux-amd64.tar.gz tar -xzf alertmanager-0.23.0.linux-amd6…...

C++学习:六个月从基础到就业——C++学习之旅:STL迭代器系统

C学习&#xff1a;六个月从基础到就业——C学习之旅&#xff1a;STL迭代器系统 本文是我C学习之旅系列的第二十四篇技术文章&#xff0c;也是第二阶段"C进阶特性"的第二篇&#xff0c;主要介绍C STL迭代器系统。查看完整系列目录了解更多内容。 引言 在上一篇文章中…...

缓存与数据库一致性方案

一、缓存更新策略概述 在现代分布式系统中&#xff0c;缓存作为数据库的前置层&#xff0c;能显著提升系统性能。然而&#xff0c;缓存与数据库之间的数据一致性是一个经典难题。以下是三种常见的缓存更新策略及其优缺点分析。 二、方案对比分析 方案一&#xff1a;直接更新…...

国内ip地址怎么改?详细教程

在中国&#xff0c;更改IP地址需要遵守规则&#xff0c;并确保所有操作合规。在特定情况下&#xff0c;可能需要修改IP地址以满足不同需求或解决特定问题。以下是一些常见且合法的IP地址变更方法及注意事项&#xff1a; 一、理解IP地址 IP地址是设备在网络中的唯一标识&#x…...

通过Quartus II实现Nios II编程

目录 一、认识Nios II二、使用Quartus II 18.0Lite搭建Nios II硬件部分三、软件部分四、运行项目 一、认识Nios II Nios II软核处理器简介 Nios II是Altera公司推出的一款32位RISC嵌入式处理器&#xff0c;专门设计用于在FPGA上运行。作为软核处理器&#xff0c;Nios II可以通…...

拥抱基因体检,迎接精准健康管理新时代

2025年4月20日&#xff0c;由早筛网、细胞科技网联合中国食品药品企业质量安全促进会细胞医药分会、中国抗衰老促进会健康管理工作委员会、中国抗癌协会肿瘤分子医学专业委员会、广东省保健协会&#xff0c;伯温生物冠名支持的《基因体检赋能精准健康管理新时代》圆满召开。 伯…...

QT容器类控件及其属性

Group Box 使用QGroupBox实现一个带有标题的分组框&#xff0c;可以把其它的控件放到里面作为一组 例&#xff1a; 核心属性 属性 说明 title 分组框的标题 alignment 分组框内部内容的对齐方式 flat 是否”扁平模式” checkable 是否可选中 设为true&#xff0c;则…...

云原生--CNCF-3-核心工具介绍(容器和编排、服务网格和通信、监控和日志、运行时和资源管理,安全和存储、CI/CD等)

1、核心工具分类介绍 &#xff08;1&#xff09;、容器编排与管理 1、Docker 它是一款轻量级的容器化技术&#xff0c;可把应用及其依赖打包成独立的容器。借助Docker&#xff0c;开发者能够确保应用在不同环境中保持一致的运行状态。比如在开发环境中创建的容器&#xff0c…...

网络基础知识

文章目录 一、网络架构1. 网络架构图2. 各层级功能3. 机房网络常见问题及解决方案 二、交换技术1. 交换技术基础2. 交换技术分类3. 广播域相关概念4. ARP 协议5. 三层交换机6. VLAN&#xff08;虚拟局域网&#xff09; 三、路由技术1. 路由器端口类型及功能2. 路由器功能3. 路由…...

第3课:运算符与流程控制——JS的“决策者”

一切美好都值得你全力以赴。即使过程艰难&#xff0c;但只要坚持&#xff0c;必有回响。加油&#xff01; 欢迎来到「JavaScript 魔法学院」第 3 课&#xff01;今天我们将化身代码世界的“指挥官”&#xff0c;用运算符计算数据&#xff0c;用流程控制做出决策&#xff01;文…...

VUE3中使用echarts,配置都正确,不出现tooltip

在vue3中使用echarts&#xff0c;出现个别问题&#xff0c;需要注意echars对象的定义&#xff0c;不能使用reactive或者ref定义响应式变量&#xff0c;要使用shallowRef &#xff1b; shallowRef 是 Vue 3 提供的一个 API&#xff0c;它创建一个响应式引用(ref)&#xff0c;但…...

Python实现邮件发送

一、创造灵感 这几天在指导学生做毕业设计&#xff0c;学生做的是跌倒检测。然后我突然想到&#xff0c;如果这个系统只是单纯地从视频流中检测到人的跌倒动作&#xff0c;其实并没有任何的用途和意义。于是&#xff0c;我又想到&#xff0c;如果跌倒的检测结果&#xff0c;能…...

OSPF的优化

OSPF的优化 1、汇总 --- 减少骨干区域LSA的更新量 汇总 --- 区域汇总 域间路由汇总 --- 在ABR设备上&#xff0c;针对3类LSA进行汇总 [r1-ospf-1-area-0.0.0.2]abr-summary 192.168.0.0 255.255.252.0 注&#xff1a;在进行域间路由汇总时&#xff0c;必须是ABR设备自己通过拓…...

IP-guard离线卸载客户端及清除策略说明

1、控制台生成客户端工具 控制台选择“工具-客户端工具-客户端离线辅助工具”&#xff0c;可生成客户端离线卸载工具及 离线策略清除工具&#xff0c;打包生成exe后&#xff0c;可在离线的客户端上运行&#xff0c;实现离线情况下对客户端 进行卸载或者清除策略。 在控制台上“…...

腾讯秋招面试题:bug生命周期中有哪些状态?

在软件测试中,Bug生命周期是质量管控的核心脉络。不同企业的流程或有差异,但核心状态遵循行业通用规范。以下以腾讯TAPD缺陷管理模型为基础,结合互联网大厂主流实践,详解Bug生命周期的关键状态及流转逻辑。 一、基础状态图谱 图表 代码 下载 确认有效 非缺陷/需求不符…...

PyCharm 链接 Podman Desktop 的 podman-machine-default Linux 虚拟环境

#工作记录 PyCharm Community 连接到Podman Desktop 的 podman-machine-default Linux 虚拟环境详细步骤 1. 准备工作 确保我们已在 Windows 系统中正确安装并启动了 Podman Desktop。 我们将通过 Podman Desktop 提供的名为 podman-machine-default 的 Fedora Linux 41 WSL…...

学习海康VisionMaster之卡尺工具

一&#xff1a;进一步学习了 今天学习下VisionMaster中的卡尺工具&#xff1a;主要用于测量物体的宽度、边缘的特征的位置以及图像中边缘对的位置和间距 二&#xff1a;开始学习 1&#xff1a;什么是卡尺工具&#xff1f; 如果我需要检测芯片的每一个PIN的宽度和坐标&#xff…...

私有知识库 Coco AI 实战(二):摄入 MongoDB 数据

在之前的文章中&#xff0c;我们介绍过如何使用《 Logstash 迁移 MongoDB 数据到 Easyseach》&#xff0c;既然 Coco AI 后台数据存储也使用 Easysearch&#xff0c;我们能否直接把 MongoDB 的数据迁移到 Coco AI 的 Easysearch&#xff0c;使用 Coco AI 对数据进行检索呢&…...

【C/C++】插件机制:基于工厂函数的动态插件加载

本文介绍了如何通过 C 的 工厂函数、动态库&#xff08;.so 文件&#xff09;和 dlopen / dlsym 实现插件机制。这个机制允许程序在运行时动态加载和调用插件&#xff0c;而无需在编译时知道插件的具体类型。 一、 动态插件机制 在现代 C 中&#xff0c;插件机制广泛应用于需要…...

硬核科普丨2025年安全、高效网络准入控制系统深度解析

阳途网络准入控制系统&#xff08;Network Access Control&#xff0c;简称NAC&#xff09;是当代网络安全领域的重要工具&#xff0c;有效防止未经授权的访问和数据泄露&#xff0c;保障网络资源的安全性和完整性。本文将深入探讨阳途网络准入控制系统的的重要性和作用。 一、…...

2025知识管理趋势解析:AI、协作与用户体验引领变革

知识管理软件是多元化的商业工具&#xff0c;包括知识库系统、wiki、协作平台、文档管理工具、聊天机器人和帮助系统&#xff0c;针对企业信息爆炸式增长的趋势&#xff0c;这些工具正逐步成为提升知识工作者效率和客户服务水平的关键支撑。 知识成为新资产&#xff1a;知识工…...

杂谈-有感而发

今天又拜读了线性代数的几何意义这本书&#xff0c;感觉确实是很不错的&#xff0c;从几何角度讲解线性代数&#xff0c;而且将线性代数、几何、数学、物理有机结合起来了&#xff0c;不仅仅是可视化&#xff0c;重要的是能便于自己独立思考下去。   从大一开始&#xff0c;就…...

使用nodeJs的express+axios+cors做代理

使用nodeJs的expressaxioscors做代理 前端在请求后端时通常会遇到跨域cors问题&#xff0c;如果只在本地开发可以通过webpack或vite的proxy设置。但如果需要在线上或者其他地方绕过跨域&#xff0c;可以使用代理的方法。 1. 创建文件夹 并创建以下文件 package.json {"…...

SQL进阶知识:四、索引优化

今天介绍下关于索引优化的详细介绍&#xff0c;并结合MySQL数据库提供实际例子。 索引优化是数据库性能优化的关键环节之一&#xff0c;尤其是在处理大量数据时。索引可以加快查询速度&#xff0c;减少数据扫描范围&#xff0c;但不当的索引设计也可能导致性能问题。以下是关于…...

C++初阶-类和对象(下)

目录 1.再探构造函数 2.类型转换 3.友元 4.static成员 5.内部类 6.匿名对象 *7.对象拷贝时的编译器优化&#xff08;非必学&#xff09; 8.总结 1.再探构造函数 &#xff08;1&#xff09;之前我们实现构造函数时&#xff0c;初始化成员变量主要使用函数体内赋值&#…...

RPC通信原理实战

RPC概念及RPC请求响应流程 RPC概念引入 假设有两个模块&#xff0c;用户和订单 在单体项目中&#xff0c;两个模块被打包到一个包&#xff0c;都处在一个tomcat进程中&#xff0c;用户模块调用订单模块属于同一进程内的本地调用 在微服务项目中&#xff0c;用户模块和订单模…...

自动创建 中国古代故事人物一致性图画,看看扣子的空间是否能达到你的满意,自媒体的福音?

欢迎来到涛涛聊AI 看效果&#xff1a; AI绘画最难的人物一致性问题&#xff0c;每次得到的结果都不一致。 官方介绍&#xff1a; 扣子空间是你和 AI Agent 协同办公的最佳场所。 在扣子空间里&#xff0c;精通各项技能的「通用实习生」&#xff0c;各行各业的「领域专家」&…...

【Unity笔记】Unity音效管理:ScriptableObject配置 + 音量控制 + 编辑器预览播放自动化实现

摘要&#xff1a; 本文介绍了如何在 Unity 中构建一个高效的音效管理系统&#xff0c;通过 ScriptableObject 实现音效集中配置&#xff0c;支持为每个音效单独设置音量&#xff0c;并通过自定义 Editor 实现音效的可视化预览播放与下拉选择播放功能&#xff0c;整个系统无场景…...

面向高可靠场景的RISC-V低功耗MCU硬件安全设计

该RISC-V架构的低功耗MCU通过多项硬件级安全技术满足工业控制、汽车电子及物联网等领域对可靠性与安全性的需求。其核心特性包含六个方面&#xff1a; 在数据完整性验证与固件安全升级方面&#xff0c;该MCU通过硬件级校验机制&#xff08;如CRC、哈希算法&#xff09;确保固件…...

OpenVINO教程(五):实现YOLOv11+OpenVINO实时视频目标检测

目录 实现讲解效果展示完整代码 本文作为上篇博客的延续&#xff0c;在之前实现了图片推理的基础上&#xff0c;进一步介绍如何进行视频推理。 实现讲解 首先&#xff0c;我们需要对之前的 predict_and_show_image 函数进行拆分&#xff0c;将图像显示与推理器&#xff08;pre…...

【新能源科学与技术】MATALB/Simulink小白教程(一)实验文档【新能源电力转换与控制仿真】

DP读书&#xff1a;新能源科学与工程——专业课「新能源发电系统」 2025a 版本 MATLAB下面进入正题 仿真一&#xff1a;Buck 电路一、仿真目的二、仿真内容&#xff08;一&#xff09;Buck电路基本构成及工作原理&#xff08;二&#xff09;Buck电路仿真模型及元件连接&#xf…...

软件项目实施全流程及交付物清单

需求分析 -> 概要设计 -> 详细设计 -> 开发 -> 测试 -> 部署 -> 上线运行 一、确认项目目标、范围和团队成员 二、收集和分析客户需求&#xff0c;确定需求规格 三、制定详细的项目计划&#xff0c;包括时间表、资源计划、预算 四、系统架构设计&#xf…...

Docker安装ES :确保 Kibana 正确连接 Elasticsearch

在使用 Docker 部署 ELK&#xff08;Elasticsearch、Logstash、Kibana&#xff09;堆栈时&#xff0c;正确的服务配置和依赖管理至关重要。本文将分享如何优化 Docker Compose 配置&#xff0c;确保 Kibana 能稳定连接到 Elasticsearch&#xff0c;并提供故障排查建议 cd /opt/…...

云贝餐饮 最新 V3 独立连锁版 全开源 多端源码 VUE 可二开

云贝餐饮源码 最新 V3 独立连锁版 全开源 多端源码 VUE 可二开 vue uniapp 独家优化版本 后台管理 Vue 源文件 后台管理文件 yii2 升级包 &#xff08;全开源&#xff09; 收银台 Vue 源文件 装修 Vue 源文件 商家端 uni-app 源文件 用户端 uni-app 源文件 数据库文件 云贝餐饮…...

python异步协程async调用过程图解

1.背景&#xff1a; 项目中有用到协程&#xff0c;但是对于协程&#xff0c;线程&#xff0c;进程的区别还不是特别了解&#xff0c;所以用图示的方式画了出来&#xff0c;用于理清三者的概念。 2.概念理解&#xff1a; 2.1协程&#xff0c;线程&#xff0c;进程包含关系 一…...

【Java学习笔记】选择结构

选择结构 内容结构 一、顺序结构 二、分支控制 &#xff08;1&#xff09;单分支 &#xff08;2&#xff09;双分支 &#xff08;3&#xff09;多分支 &#xff08;4&#xff09;嵌套分支 &#xff08;5&#xff09;switch 分支结构 三、switch和if的比较 一、顺序结构…...

java Nacos

windows下载nacos&#xff0c;版本2.x的&#xff0c;1.0的话会出现“Server check fail, please check server 127.0.0.1 ,port 9848 is available , error {}” 这个鬼问题 下载链接 这里用的是2.0.4版本&#xff0c;启动的话用 startup.cmd -m standalone&#xff0c;单体启…...

c语言之杂识

前言 主要说一下c语言的杂知识 一、预处理指令 1. #include #include指令用于包含其他头文件的内容到当前文件中。这允许您在程序中使用其他模块定义的函数和变量。 示例&#xff1a; #include <stdio.h> // 包含标准输入输出头文件int main() {printf("Hello…...

CSS内边距、外边距、边框

CSS内边距 内边距 &#xff1a;内容区&#xff08;Content&#xff09;与边框&#xff08;Border&#xff09;之间的透明间距&#xff0c;用于增加元素内部的留白。不影响元素内容本身的尺寸&#xff08;如文字大小&#xff09;&#xff0c;但会增大元素的总占用空间。 以下是…...

融山科技前端面经

前端面试问题解答 这次是波珠的第三次面试&#xff0c;持续打怪升级&#xff0c;积累面试中面试官问到的不会的点子。 1.自我介绍 面试官您好&#xff0c;我是来自XX学校XX专业本科的XX名字&#xff0c;然后介绍在学校情况&#xff0c;我就介绍了大一自学前端&#xff0c;然…...

元素滚动和内容垂直居中同时存在,完美的 html 元素垂直居中的方法flex + margin: auto

假设有一个元素 div 作为父容器且宽高固定&#xff0c;里面的内容 content 在父容器中垂直/水平都居中&#xff0c;且当内容很多时&#xff0c;父元素滚动overflow: auto&#xff0c;content的内容要能够完全展示。 我之前在这篇文档提到了两个方法&#xff1a; 使用 flex s…...

STM32F103 单片机(基于 ARM Cortex-M3 内核)的启动过程涉及硬件初始化、固件配置和程序执行流程。

1. 启动模式与地址映射 STM32F103 的启动模式由 BOOT0 和 BOOT1 引脚配置决定&#xff0c;不同的启动模式对应不同的存储器映射&#xff1a; 启动模式 映射地址范围 说明 主 Flash 0x08000000~0x0807FFFF 用户程序存储在 Flash 中&#xff0c;复位后从 Flash 启动&#xff08…...

c++中iota容器和fill的区别

在C 中&#xff0c;std::iota 和 std::fill 都是标准库中的函数&#xff0c;用于对序列进行操作&#xff0c;它们的功能和用法如下&#xff1a; std::iota 功能&#xff1a;std::iota 函数用于将一个连续的递增序列赋值给指定范围的元素。它接受三个参数&#xff0c;第一个参…...

Kafka集群

kafka集群: kafka-server-start.sh;kafka-server-stop.sh cd/opt/software/kafka/ kafka.sh上传:cd /usr/local/bin/ 执行文件变成绿色&#xff1a;chmod 777 kafka.sh Kafka.sh start Xcall.sh jps...

多源数据集成技术分析与应用实践探索

摘要&#xff1a;本文聚焦多源数据集成技术&#xff0c;深入剖析联邦式、基于中间件模型及数据仓库三类主流技术的侧重点与应用场景。通过实际案例阐述多源数据集成应用构建过程&#xff0c;旨在为企业数据整合与共享提供理论指导与实践参考&#xff0c;助力企业提升数据利用效…...

UniOcc:自动驾驶占用预测和预报的统一基准

25年3月来自 UC Riverside、U Wisconsin 和 TAMU 的论文"UniOcc: A Unified Benchmark for Occupancy Forecasting and Prediction in Autonomous Driving"。 UniOcc 是一个全面统一的占用预测基准&#xff08;即基于历史信息预测未来占用&#xff09;和基于摄像头图…...

反向代理和DDNS的区别是什么?

反向代理&#xff08;Reverse Proxy&#xff09;和动态域名解析&#xff08;DDNS&#xff0c;Dynamic Domain Name System&#xff09;是两种不同的网络技术&#xff0c;虽然它们都与外部访问内部服务相关&#xff0c;但解决的问题和应用场景完全不同。具体区别如下&#xff1a…...

markdown展示数学公式

要让Markdown正确展示数学公式&#xff0c;你需要使用支持数学公式渲染的工具&#xff0c;比如在支持LaTeX语法的Markdown编辑器中进行编写。 Markdown本身并不原生支持数学公式的渲染&#xff0c;但许多Markdown解析器&#xff08;例如在GitHub、Jupyter Notebooks、或一些博…...