千锋教育嵌入式物联网教程之系统编程篇学习-03

2023-11-05 03:59

本文主要是介绍千锋教育嵌入式物联网教程之系统编程篇学习-03,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

进程的终止

exit函数

_exit函数 

 进程退出清理

进程间的替换

进程间通信

常见通信机制

进程间通信的实质

 信号

产生信号的方式

 信号的默认处理方式

进程对信号的处理方式 

kill函数 

进程的终止

使用exit函数对进程进行终止,而return只是结束函数,如果想让return结束进程的话,那么把它放在主函数当中即可。一般都是使用exit(以我的知识面)

exit函数

_exit函数 

 

 

 

 

 进程退出清理

其实就是当进程要退出时,最后执行的一个函数

我也不知道有什么用,为什么不直接取一个函数,并且把这个函数的位置放在最后面不就行了,不理解这个函数应该在什么场景使用

进程间的替换

实质就是:不使用fork的基础上,实现另外一个进程(剧本)。

常见的操作:在一个进程中我想知道当前的文件路径,那么你就可以直接使用shell命令pwd即可实现了,因此exec可以帮我们实现linux中的命令。或者你想执行另外一个C程序./hello例如

虽然有6个函数,但是我觉得使用一个函数即可execvp即可,把命令使用数组保存更好看,而且可以使用相对路径,不需要使用绝对路径

 

 理解Path其实就是一个可执行文件,其实在linux终端输入ls,它就是一个可执行文件

 不带P的只能使用绝对路径,而带P的可以使用绝对和相对路径,因此execlp可以直接取代execl数更方便

 

 exec是替换,而fork是继承赋值

 

进程间通信

进程间的相互通信,使用某些固定的函数进行编程

进程间通信功能:数据传输、资源共享、通知事件、 进程控制

常见通信机制

 这些通信方式,你在裸机开发中也会使用到部分内容,其次在学freertos的时候,也使用到了内容:如事件标志组、二值信号量、消息队列、任务通知都有这些身影

不同主机通信--socket套接字

进程间通信的实质

 重点:绝大多数进程间的通信方式是基于内核空间的操作

 信号

 异步就是:进程不需要等待信号的到达,进程也不知道信号啥时候到达,相当于单片机的中断层次,突然就来了--然后处理某一个突发事件。所以理解:信号是软件中断--对硬件中断的模拟

后面的知识可以知道,信号比中断更完善,因为单片机的中断来了就需要执行,但是信号来了不一定需要执行,可以不执行(忽略信号),但是在硬件中貌似中断是不能忽略的,必须去执行中断。

因此这个软件中断,起提醒作用,提醒你来了信号,但是至于你执不执行看你自己需求,不强求执行

 我们只会使用前31个信号,并且只使用几个常用信号而已

 

 信号的名字都已经定义好了,因此我们是使用已有的信号进行编程

 

 这个操作我们经常使用,也需要记住,因为有时候我们写程序的时候是死循环,那么我们可以直接使用该命令,可以强制退出我们的死循环程序

产生信号的方式

 区分kill函数和kill命令,kill不是杀死的意思,它的作用是发送信号

 信号的默认处理方式

 

进程对信号的处理方式 

 信号默认处理方式与进程对信号的处理方式区分并且理解一下,一个是信号本身具备的默认能力,而另外一个是进程对信号的处理方式。就像砖头(信号)的默认功能是建房子,而人(进程)把砖头(信号)当打人工具(执行自定义信号处理)。但是有些信号是只能当默认的,比如钱的处理方式是花,你不能烧(自己理解一下)

 

kill函数 

进程组的所有进程可以理解为在主进程中我们fork了很多子进程,而这些子进程与主进程都在一个进程组中

PID:进程的唯一标识
PGID:进程组ID

 千万pid不要等于-1--不然系统所有进程都被搞了--后果很大--但是不知道会出现啥情况

 至于信号的选择,我们的作用是退出进程,因此在信号表中选择一个功能为退出进程的功能即可

自己也可以向自己发信号--或者是等待到了某种事情,该进程就自动退出

我们也可以在终端对某一个进程进行发信号:kill 信号选项 进程号----功能为数字,为2的时候表示停止进程,而进程号的获取,我们可以使用ps ajx获取所有进程号

kill 2 3103/kill -2 3103    2表示SIGINT信号 

 

这篇关于千锋教育嵌入式物联网教程之系统编程篇学习-03的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/347280

相关文章

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

全网最全Tomcat完全卸载重装教程小结

《全网最全Tomcat完全卸载重装教程小结》windows系统卸载Tomcat重新通过ZIP方式安装Tomcat,优点是灵活可控,适合开发者自定义配置,手动配置环境变量后,可通过命令行快速启动和管理... 目录一、完全卸载Tomcat1. 停止Tomcat服务2. 通过控制面板卸载3. 手动删除残留文件4.

linux系统中java的cacerts的优先级详解

《linux系统中java的cacerts的优先级详解》文章讲解了Java信任库(cacerts)的优先级与管理方式,指出JDK自带的cacerts默认优先级更高,系统级cacerts需手动同步或显式... 目录Java 默认使用哪个?如何检查当前使用的信任库?简要了解Java的信任库总结了解 Java 信

Python的pandas库基础知识超详细教程

《Python的pandas库基础知识超详细教程》Pandas是Python数据处理核心库,提供Series和DataFrame结构,支持CSV/Excel/SQL等数据源导入及清洗、合并、统计等功能... 目录一、配置环境二、序列和数据表2.1 初始化2.2  获取数值2.3 获取索引2.4 索引取内容2

python依赖管理工具UV的安装和使用教程

《python依赖管理工具UV的安装和使用教程》UV是一个用Rust编写的Python包安装和依赖管理工具,比传统工具(如pip)有着更快、更高效的体验,:本文主要介绍python依赖管理工具UV... 目录前言一、命令安装uv二、手动编译安装2.1在archlinux安装uv的依赖工具2.2从github

C#实现SHP文件读取与地图显示的完整教程

《C#实现SHP文件读取与地图显示的完整教程》在地理信息系统(GIS)开发中,SHP文件是一种常见的矢量数据格式,本文将详细介绍如何使用C#读取SHP文件并实现地图显示功能,包括坐标转换、图形渲染、平... 目录概述功能特点核心代码解析1. 文件读取与初始化2. 坐标转换3. 图形绘制4. 地图交互功能缩放

Oracle数据库在windows系统上重启步骤

《Oracle数据库在windows系统上重启步骤》有时候在服务中重启了oracle之后,数据库并不能正常访问,下面:本文主要介绍Oracle数据库在windows系统上重启的相关资料,文中通过代... oracle数据库在Windows上重启的方法我这里是使用oracle自带的sqlplus工具实现的方

SpringBoot集成redisson实现延时队列教程

《SpringBoot集成redisson实现延时队列教程》文章介绍了使用Redisson实现延迟队列的完整步骤,包括依赖导入、Redis配置、工具类封装、业务枚举定义、执行器实现、Bean创建、消费... 目录1、先给项目导入Redisson依赖2、配置redis3、创建 RedissonConfig 配

MySQL的JDBC编程详解

《MySQL的JDBC编程详解》:本文主要介绍MySQL的JDBC编程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、前置知识1. 引入依赖2. 认识 url二、JDBC 操作流程1. JDBC 的写操作2. JDBC 的读操作总结前言本文介绍了mysq

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同