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

千锋教育嵌入式物联网教程之系统编程篇学习-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信号 

 

http://www.lryc.cn/news/3770.html

相关文章:

  • 升级到https
  • 【C语言】数据结构-二叉树
  • c++中std::condition_variable最全用法归纳
  • Python数据可视化:数据关系图表可视化
  • Urho3D约定
  • python数据结构-列表,元组
  • Properties类读配置文件、修改配置文件
  • 图解LeetCode——剑指 Offer 24. 反转链表
  • 【C语言】“指针的运算”、“指针与数组”
  • Linux高级命令之查找文件命令
  • PyCharm+Docker:打造最舒适的深度学习炼丹炉
  • 【mock】手把手带你用mock写自定义接口+mock常用语法
  • 2023 年腾讯云服务器CVM快速配置购买教程,新手上云必备!
  • opencv显示图像
  • C++:类和对象(中)
  • 53. 最大子数组和
  • 基于Java+SpringBoot+SpringCloud+Vue前后端分离医院管理系统设计与实现
  • QT基础入门【环境配置篇】linux桌面QT开发环境的构建以及问题解决
  • Linux系统之部署企业内部静态导航页
  • 2023备战金三银四,Python自动化软件测试面试宝典合集(四)
  • 算法训练营 day43 动态规划 不同路径 不同路径 II
  • 关联查询的SQL有几种情况
  • 查缺补漏三:事务隔离级别
  • 没有她的通讯录(C语言实现)
  • Spring Security 从入门到精通
  • 微信小程序Springboot vue停车场车位管理系统
  • 看完这篇 教你玩转渗透测试靶机vulnhub——Hack Me Please: 1
  • nodejs+vue地铁站自动售票系统-火车票售票系统vscode
  • Spring Security in Action 第十二章 OAuth 2是如何工作的?
  • 天工开物 #5 我的 Linux 开发机