嵌入式 Linux 应用之进程

Unity 升级引擎版本后构建报错:script class layout is incompatible between the editor and the player Unity升级引擎版本后,项目报错:script class layout is incompatible between the editor and the player。 阅读详情

目录

1. 进程

1.1 并发和并行

并发和并行的概念

并发和并行的区别

1.2 进程的状态

2. 进程的控制

 2.1 fork 函数

 2.2 如何区分父子进程

2.3 父子进程间的数据共享

2.4 vfork 函数


1. 进程

1.1 并发和并行

并发和并行的概念

  • 并发:在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行
  • 并行:当系统有一个以上 CPU 时,当一个 CPU 执行一个进程时,另一个 CPU 可以执行另一个进程,两个进程互不抢占 CPU 资源,可以同时进行,这种方式我们称之为并行(Parallel)。

并发和并行的区别

  • 并发:指的是多个事情,在同一时间段内同时发生了。
  • 并行:指的是多个事情,在同一时间点上同时发生了。

  • 并发的多个任务之间是互相抢占资源的。
  • 并行的多个任务之间是不互相抢占资源的、只有在多CPU或者一个CPU多核的情况中,才会发生并行。否则,看似同时发生的事情,其实都是并发执行的

1.2 进程的状态

进程基本的状态有五种,分别为初始态,就绪态,运行态,挂起态和终止态。其中初始态为进程准备阶段,常常与就绪态结合来看。

2. 进程的控制

 2.1 fork 函数

  • fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。
  • 一个进程调用 fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同。相当于克隆了一个自己。

函数原型:

 pid_t fork(void);

返回值: =0:当前进程为子进程
                >0:当前进程为父进程
                 ‐1,出错

 2.2 如何区分父子进程

getpid/getppid 函数

  • getpid:得到当前进程的PID
  • getppid:得到当前进程的父进程的PID

2.3 父子进程间的数据共享

fork 之前两个地址空间区数据完全相同, fork 后续各自进行了不同的操作

程序演示:

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>

int main()
{
	pid_t pid;
	int cnt = 0;

	pid = fork();
	if (pid > 0) // 父进程
	{
		while (1)
		{
			printf("this is father print, pid = %d,  cnt = %d\n", getpid(), cnt);
			sleep(1);
		}
	}
	else if (pid == 0) // 子进程
	{
		while (1)
		{
			printf("this is chilid print, pid = %d,  cnt = %d\n", getpid(), cnt);
			sleep(1); 
			cnt++;
			if (cnt == 3)
			{
				exit(0);
			}
		}
	}
	return 0;
}

程序执行结果:

证明了 fork 后父子进程之间不可通过全局变量通信,父子进程两者之间的数据互不干涉,各自运作。

2.4 vfork 函数

vfork也可以创建进程,与fork有什么区别呢?

  • 区别一:vfork 可以直接使用父进程存储空间,不拷贝
  • 区别二:vfork 可以保证子进程先运行,当子进程调用 exit 退出后,父进程才执行

程序演示:

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>

int main()
{
	pid_t pid;
	int cnt = 0;

	pid = vfork();
	if (pid > 0) //父进程
	{
		while (1)
		{
			printf("this is father print, pid = %d,  cnt = %d\n", getpid(), cnt);
			sleep(1);
		}
	}
	else if (pid == 0) // 子进程
	{
		while (1)
		{
			printf("this is chilid print, pid = %d,  cnt = %d\n", getpid(), cnt);
			sleep(1);
			cnt++;
			if (cnt == 3)
			{
				exit(0);
			}
		}
	}
	return 0;
}

程序执行结果:

YOLOv5添加注意力机制的具体步骤 本文主要介绍了 本文在此篇博客的基础上向YOLOv5-5.0版 本文主要包括以下内容一、CBAM注意力机制添加(1)修改yolov5s主干网络(2)在common.py中添加可调用的CBAM模块(3)向yolo.py文件添加CBAMC3判断语句二、SE注意力机制添加 本文以yolov5s网络为例 一、CBAM注意力机制添加 注意力机制可以添加在backbone,Neck,Head等部分,接下来本文以backbone主干网络为例 (1)修改yolov5s主干网络 1.在yolov5-5.0工程文件夹下,找到m 阅读详情

相关推荐

VSCode连接SAP ABAP开发环境

本文介绍了使用VSCode连接ABAP开发环境的详细步骤。首先通过SICF或SMICM事务码获取ABAP连接地址,然后安装ABAP remote filesystem插件。提供了两种创建连接的方法:通过命令面板逐步配置(输入服务器地址、账号、系统标识等)或直接编辑JSON配置文件。最后通过命令面板选择已创建的连接即可完成连接,连接成功后可在VSCode左侧工作区查看ABAP系统内容进行开发。JSON配置方式更为简便推荐。整个流程帮助开发者摆脱复杂的Eclipse配置,实现快速便捷的ABAP开发环境搭建。

weixin_45293769的博客 2214

Android Binder【篇一:追根溯源 Linux IPC前世今生】

本文深入分析了Android Binder驱动的工作原理与实现机制。首先介绍了Linux内核基础概念,包括内存管理和进程隔离原理,阐述了用户空间与内核空间的交互方式。随后重点解析了Binder驱动的核心实现:驱动初始化过程、设备文件打开机制、内存映射技术以及关键数据结构(binder_proc、binder_node、binder_ref等)。文章详细说明了Binder如何通过内存映射实现"一次拷贝"的高效数据传输,并剖析了驱动命令处理流程,包括BINDER_WRITE_READ和BIN

qq_27672101的博客 7803

告别手动归档:基于Allegro Skill的XTools一键生成Gerber与生产文件实践

本文详细介绍了基于Allegro Skill的XTools工具如何实现一键生成Gerber与生产文件,大幅提升PCB设计效率。通过自动化流程,解决了传统手动归档中的重复劳动、人为失误和标准不统一等问题,特别适合需要频繁输出生产文件的工程师。文章包含安装配置、实战操作、问题排查及进阶技巧,帮助用户快速掌握这一高效工具。

weixin_30505225的博客 461

嵌入式面试之进程、任务和中断

任务可以看作是一项或一组待完成的工作,它通常与特定的目标和输出相关。在实时操作系统(RTOS)中,任务是一个更细粒度的运行实体,它可以是一个轻量级的进程或一个线程,拥有特定的优先级和运行状态。处理器将执行一个特定的中断处理程序来处理这个事件,然后再返回到中断前的状态继续执行。进程是操作系统中的一个基本概念,代表一个独立的运行环境。进程间相互独立,一个进程不能直接访问另一个进程的资源。进程、任务和中断是在嵌入式面试中经常被问到的问题,下面给出了具体的回答指导。

艾格北峰嵌入式 768

2025华东杯A/B/C题解题思路+可运行代码参考

这些因素包括但不限于:助滑坡的坡度、运动员的质量、滑雪板的接触面与雪地的摩擦力、空气阻力系数、运动员的体型和衣物形态等。助滑坡是运动员滑行至起跳台前的最后一段坡道,这一段坡道的坡度、长度和运动员的姿势会直接影响到起跳时的初始速度。运动员的滑行速度不仅受助滑坡的坡度影响,还受到摩擦力、空气阻力和重力等多方面因素的影响。通过合理的姿势调整,运动员能够有效减少空气阻力,增加身体的重力加速度,进而提升滑行速度。助滑坡的角度通常介于10°到12°之间,而运动员的滑行速度将受到重力、摩擦力和空气阻力的共同作用。

qq_52590045的博客 1797

EB tresos配置指南:CAN通信信号收发全流程解析

本文详细解析了使用EB tresos配置工具实现AUTOSAR架构下CAN通信信号收发功能的全流程。从环境准备、COM模块信号定义、PduR路由配置、CanIf硬件抽象到CAN驱动层设置,提供了清晰的步骤指南和关键配置要点,帮助开发者快速打通从应用层到物理层的数据链路,实现可靠的CAN通信。

weixin_29192141的博客 508

嵌入式操作系统(1):进程和线程

一、进程 1.1. 进程概念 在某种程度上, 可以将应用程序看成是一个进程(Process),其将会消耗耕种各样的计算机资源。 进程定义&特点 一个具有一定独立功能的程序在一个数据集合上的一次动态执行过程。 动态性:可动态创建,结束进程。 并发性:进程可以被独立调度并占用处理机运行。并发并行 独立性:不同的进程的工作不互相影响。 制约性:因访问共享的数据&资源或者进程同步而产生制约。调度 程序的组成 程序 = 算法 + 数据结构 进程的组成 进程=程序+数据+进程控制.

qq_41668705的博客 3258

芒果YOLO11改进176:2025最新顶会论文|尺度动态损失函数Scale-based Dynamic Loss,即插即用|以减少标签不准确对损失函数稳定性的影响

芒果YOLO11改进186:2025最新顶会论文|尺度动态损失函数Scale-based Dynamic Loss,即插即用|以减少标签不准确对损失函数稳定性的影响

包括YOLOv5、YOLOv7、YOLOv8等模型改进 2132

嵌入式Linux C多进程编程(五)——进程退出和进程的等待

进程退出和进程的等待

河海大学研究生在读的学习笔记 1004

5G/NR SSB学习总结

6.1 SSB概念 同步信号和PBCH块(Synchronization Signal and PBCH block, 简称SSB),它由主同步信号(Primary Synchronization Signals, 简称PSS)、辅同步信号(Secondary Synchronization Signals, 简称SSS)、PBCH三部分共同组成。 6.2 SSB特征 ...

欢迎来到小七的博客,这里将带你深入探索5G通信的神秘世界。无论你是通信领域的专业人士还是对这一领域充满好奇心的技术爱好者,这里都有专业协议解读、通信知识普及以及有趣的Python编程内容等你发现。 8万+

极智嘉嵌入式面试题及参考答案

IIC(Inter-Integrated Circuit)即集成电路总线,是一种由 PHILIPS 公司开发的两线式串行总线,用于连接微控制器及其外围设备。它仅使用两根线,即串行数据线 SDA 和串行时钟线 SCL,就能实现多个设备之间的通信,具有简单、高效、占用资源少等优点,广泛应用于各种嵌入式系统中。

大模型大数据攻城狮的专栏 921

嵌入式开发------------------进程

1.它是守护进程,也就是通常所说的Daemon进程,是Linux三种进程之一,通常在系统启动时运行,在系统关闭时结束.2.始终运行在后台,后台服务进程3.独立于任何终端(和终端无关)。4.周期性地执行某种任务或等待处理特定事件。

weixin_46581245的博客 347

YOLO模型在STM32微控制器上的部署:1.98M参数如何塞进嵌入式设备?

<think>我们根据内容生成不超过150字的摘要。内容主要是关于YOLO模型在STM32微控制器上的部署,包括STM32N6 NPU、模型量化、工具链、开源方案和架构设计。摘要需要简洁概括主要点。 字数限制:≤150字。需要包含关键信息:STM32N6运行YOLO,困难,方案(NPU、INT8量化、工具链),性能(34 FPS 9.4mJ)。结尾可能提到开源和生态。 写中文摘要。注意不超过150字。</think>本文探讨YOLO模型在STM32微控制器上的部署。集成NPU的STM32N6搭配轻量化YOL

2601_95807009的博客 255

linux 进程托管,嵌入式Linux系统中应用进程的托管方法及系统的制作方法

专利名称:嵌入式Linux系统中应用进程的托管方法及系统的制作方法技术领域:本发明涉及计算机领域,尤其涉及应用嵌入式Linux系统计算机, 具体涉及一种嵌入式系统中应用进程的托管方法及系统。背景技术:目前巿场上的企业级应用产品一般是每个应用是一个独立的设 备或者软件,不同的应用体系相互独立,由不同的厂家开发和提供, 难以集成和融合。随着信息化程度的不断提高,在企业中嵌入式设备 例如ADSL (As...

weixin_29958569的博客 319

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

嵌入式linux应用层开发:进程与线程

默认情况下,读写锁都是读优先,由于多个读线程不断抢先获取读锁,导致写线程长时间不能获得写锁,一直在等待队列中,迟迟得不到执行。:是一种预先创建好一定数量的工作线程,等待有任务提交,任务由空闲线程执行,执行完毕后线程不销毁,继续等待下一个任务。:当线程尝试获取锁时,如果锁已经被占用,它不会阻塞自己,而是不断地 自旋 检查锁是否已经释放。同一时刻,只有一个线程可以获取写锁,获锁期间,可以修改共享资源,其他线程无法获取读锁或写锁。:多个线程可以同时获取读锁,获取锁之后,只能进行读操作,不能进行写操作(读锁);

m0_64657422的博客 1043

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【嵌入式Linux应用开发基础】特殊进程

在嵌入式Linux应用开发中,特殊进程主要包括守护进程、僵尸进程和孤儿进程。

byte轻骑兵的技术小窝 1553

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

【嵌入式Linux应用开发基础】进程实战开发

每个进程都有一个唯一的标识符,即进程 ID(PID)。假设我们要开发一个简单的监控系统,用于监控某个特定进程的运行状态。如果该进程异常退出,我们的监控程序将重新启动它。管道是一种简单的进程间通信机制,它允许一个进程将数据发送到另一个进程。在嵌入式 Linux 应用开发中,最常用的创建新进程的方法是使用 fork()函数会清理进程占用的资源,并向父进程返回一个状态码。匿名管道只能用于具有亲缘关系(如父子进程)的进程之间通信。进程的 PID 始终为 1,它是所有其他进程的祖先。代码语言:javascript。

郭小明的专栏 323

【嵌入式Linux应用开发基础】进程间通信(4):信号

信号是嵌入式 Linux 系统中一种重要的进程间通信机制,它提供了一种异步的事件通知方式。通过合理地使用信号的发送、处理、阻塞和未决等机制,可以实现进程间的高效通信和异常处理。在实际开发中,需要注意信号处理函数的编写规范,避免在信号处理函数中调用不可重入函数,以确保系统的稳定性和可靠性。同时,要根据具体的应用场景选择合适的信号和处理方式,以满足系统的需求。

byte轻骑兵的技术小窝 1380

嵌入式Linux应用程序开发详解------(创建守护进程)

嵌入式Linux应用程序开发详解华清远见本文只是阅读文摘。创建一个守护进程的步骤:1、创建一个子进程,然后退出父进程;2、在子进程中使用创建新会话---setsid();3、改变当前工作目录---chdir();4、重新设置文件权限掩码---umask();5、关闭所有的文件描述符---close(fdx);6、设置daemon程序的任务---此例主要在while循环中体现。下面是一个例子程序:/...

weixin_33671935的博客 267

【嵌入式Linux应用开发基础】进程间通信(2):消息队列

在嵌入式Linux应用开发基础中,进程间通信(IPC)是一个重要的主题,而消息队列作为IPC的一种机制,具有其独特的特点和常见问题。

byte轻骑兵的技术小窝 3216

【嵌入式Linux应用开发基础】进程间通信(3):共享内存

共享内存是嵌入式Linux应用开发中一种高效、快速的进程间通信机制。它允许多个进程访问同一块内存区域,从而实现了数据的高效共享。在使用共享内存时,需要注意同步机制、内存管理和安全性等问题。通过合理的使用共享内存,可以大大提高嵌入式Linux应用开发的效率和性能。

byte轻骑兵的技术小窝 1724
上一篇: Linux 静态库与动态库
下一篇: 嵌入式 Linux 进程相关知识点
Outside_
博客等级 码龄5年 63粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值