信号发送与处理-上

news2024/9/30 19:28:40

问题

按下 Ctrl + C 后,命令行中的前台进程会被终止。为什么???

什么是信号?

信号是一种 "软件中断",用来处理异步事件

  • 内核发送信号到某个进程,通知进程事件的发送
  • 事件可能来自硬件,可能来自用户输入,可能来自除零错误

信号是一种类型的进程间通信方式 (一个进程向另一个进程发送信号)

  • A 进程发生事件 T,向 B 进程发送信号,B 进程执行动作响应事件
  • 进程可以对接收到的不同信号进行不同响应动作 (信号 => 处理)

信号的分类

硬件异常

  • 内核检测到硬件错误,发送相应信号给相关进程

终端信号

  • 在终端输入 "特殊字符" 等价于向前台进程组发送相应信号

软件信号

  • 在软件层面 (进程代码中) 触发的信号 (发送给自身或其他进程)

硬件异常信号

终端相关信号

SIGINT ( Ctrl + C )

  • 程序终止信号,用于通知前台进程组终止进程

SIGQUIT ( Ctrl + \ )

  • 与 SIGINT 类似,进程收到该信号退出时可产生 coredump 文件

SIGTSTP ( Ctrl + Z )

  • 停止进程的运行,进程收到该信号后可以选择处理或忽略

软件相关信号

子进程退出:父进程收到 SIGCHLD 信号

父进程退出:子进程可能收到信号 (什么信号?)

定时器到期:alarm(),ualarm(),timer_create(),...

主动发信号:kill(),raise(),...

内核与信号

信号的默认处理

知识加油站:System V  vs  BSD

System V

  • 也被称为 AT&T System V,是 Unix 操作系统众多版本中的一支

BSD

  • 加州大学伯克利分校开创,Unix 衍生系统,代表由此派生出的各种套件集合

自定义信号处理

#include <sys/types.h>

#include <signal.h>

typedef void(*sighandler_t)(int);

sighandler_t signal(int signum, sighandler_t handler);

sighandler_t sysv_signal(int signum, sighandler_t handler);

sighandler_t bsd_signal(int signum, sighandler_t handler);

信号处理示例

自定义信号发送

#include <sys/types.h>

#include <signal.h>

int kill(pid_t pid, int sig); // pid > 0, pid == 0, pid < -1

int raise(int sig); // 信号处理完毕才返回

信号发送示例

思考

三种自定义信号处理函数有什么区别???

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1180854.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

③【操作表数据】MySQL添加数据、修改数据、删除数据

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ MySQL添加数据、修改数据、删除数据 &#x1f…

渗透测试学习day2

文章目录 连接靶机靶机&#xff1a;Fawn 解题过程Task 1Task 2Task 3Task 4Task 5Task 6Task 7Task 8Task 9Task 10Task 11Task 12 总结 连接靶机 详细过程可参考day1 靶机&#xff1a;Fawn 难度&#xff1a;very easy &#xff08;ftp服务的靶机&#xff09; 解题过程 T…

单链表(1)

前面的顺序表是顺序存储&#xff08;类似于数组&#xff09;&#xff0c;下面的链表是链式存储。物理是否相邻就看其存储地址&#xff08;格子&#xff09;是否相邻挨在一起。逻辑是否相邻看其前驱后继。 例如上面3个数据 如果存在顺序表中&#xff0c;那就是100的后继是200,2…

网络测试工具—— iperf2 安卓APK 下载 及简单使用

网络测试工具—— iperf2 安卓APK 下载 及简单使用 前言一、iperf2是什么&#xff1f;二、使用步骤附上help中命令截图翻译总结 前言 项目上有一款安卓车机加载局域网图片加载非常慢&#xff0c;所以需要测试一个安卓车机设备的带宽&#xff0c;经过调研后使用到了iperf2。 一…

【Android】Debug时禁用主线程ANR限制

ANR全称Application Not Response&#xff0c;指主线程超过5s无响应&#xff0c;应用会自动退出 由于这个线程&#xff0c;如果我们给主线程加了断点&#xff0c;就会触发ANR&#xff0c;导致调试时应用退出 这样调试起来会非常麻烦&#xff0c;其实对于Debug应用&#xff0c…

解决springboot整合websocket、redis、openfeign,redisTemplate,openfeign的类无法注入的问题

在部分业务中&#xff0c;我们需要使用长连接&#xff0c;我们可以使用http长连接或者websocket&#xff0c;在springboot作为后端的框架中&#xff0c; 可以借用的技术是&#xff08;netty&#xff0c;websocket&#xff09; 版本如下 软件版本号jdk21springboot 3.1.5 spri…

企业微信开启接收消息+验证URL有效性

企业微信开启接收消息验证URL有效性 &#x1f4d4; 千寻简笔记介绍 千寻简笔记已开源&#xff0c;Gitee与GitHub搜索chihiro-notes&#xff0c;包含笔记源文件.md&#xff0c;以及PDF版本方便阅读&#xff0c;且是用了精美主题&#xff0c;阅读体验更佳&#xff0c;如果文章对…

[极客大挑战 2019]Upload 1

题目环境&#xff1a; 根据题目和环境可知此题目是一道文件上传漏洞 编写一句话木马脚本<?php eval($_POST[shell]);?>将脚本文件更改为jpg图片文件我这里是flag.jpg上传文件并burpsuite抓包Repeater重放 报错一句话木马里面有<?字符 换一种一句话木马继续编写木马…

iOS实现代码混淆

​ 目录 前言 ipaguard界面概览 ipaguard启动界面 ipaguard代码混淆界面 资源文件混淆界面 重签名界面 前言 本文章向大家介绍iOS实现代码混淆&#xff0c;主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项&#xff0c;具有一定的参考价值&#xff0c;需…

高德地图设置电子围栏

高德地图设置电子围栏 需求效果图代码实现 需求 给地图上人员锚点设置围栏区域&#xff0c;如果在此区域内则是在线状态&#xff0c;不在此区域内则是离线状态 效果图 双击可编辑或清除当前围栏 代码实现 前端实现区域框选&#xff1a; //引入高德地图sdk"amap/amap…

Python语言高级实战-内置函数super()的使用之类的多继承(附源码和实现效果)

实现功能 super()函数的调用顺序是按照方法解析顺序&#xff08;Method Resolution Order, MRO&#xff09;来确定的。MRO 是一个确定继承顺序的算法&#xff0c;它使用 C3 线性化算法来避免潜在的方法冲突。Python会根据继承顺序自动计算 MRO&#xff0c;我们只需要使用 supe…

人人都会的 Blazor —— 1.3 项目结构

项目结构 使用 Visual Studio 2022 创建 Blazor 项目。 在搜索框中输入【blazor】关键字,将列出以下已经存在的项目模板: Blazor Server App:基于 Blazor Server 托管模型的项目,并建立一些示例代码和组件;Blazor WebAssembly App:基于 Blazor WebAssembly 托管模型的项…

CSS 外边距、填充、分组嵌套、尺寸

一、CSS 外边距&#xff1a; CSS margin&#xff08;外边距&#xff09;属性定义元素周期的空间。margin清除周围的&#xff08;外边框&#xff09;元素区域。margin没有背景颜色&#xff0c;是完全透明的。margin可以单独改变元素的上、下、左、右边距&#xff0c;也可以一次改…

响应式招标投标网站模板源码带后台

模板信息&#xff1a; 模板编号&#xff1a;29165 模板编码&#xff1a;UTF8 模板分类&#xff1a;博客、文章、资讯、其他 适合行业&#xff1a;招标类企业 模板介绍&#xff1a; 本模板自带eyoucms内核&#xff0c;无需再下载eyou系统&#xff0c;原创设计、手工书写DIVCSS&a…

Python基础入门(5)----Python中的变量和表达式:变量的定义、赋值和数据类型转换

文章目录 Python中的变量和表达式:变量的定义、赋值和数据类型转换变量的定义变量的赋值数据类型转换注意事项表达式总结Python中的变量和表达式:变量的定义、赋值和数据类型转换 Python是一种高级编程语言,以其简洁明了的语法和强大的功能而闻名。在Python编程中,变量和表…

arcgis 批量删除Table中的某些Field

当shp或者table文件较少时&#xff0c;可以手动删除每个文件中的某些字段&#xff0c;当文件较多时&#xff0c;就需要使用arcpy或者model进行处理。

字节测试开发岗面试竟如此简单...

前言 因为读者里有不少刚入门测试的同学&#xff0c;这两天抽空整理了一份字节测试开发岗的面试题答案&#xff0c;说实话这个题目真挺简单的&#xff0c;如果你面大厂碰到此类面试题&#xff0c;也算是运气很好啦。大家也可以先自测一下&#xff0c;看看自己能不能答上来。 如…

图片文件过大怎么压缩?五种压缩方法大全

图片文件过大怎么压缩&#xff1f;不知道大家有没有遇到过这样的尴尬情况&#xff0c;当我们将一些图片上传到某个网站的时候&#xff0c;被提示图片大小操作了网站的限制而被禁止上传&#xff0c;我相信很多人都遇到过吧&#xff0c;其实这是网站的一张防御措施&#xff0c;防…

aosp定制android系统

目录 AOSP 准备工作(配置) 确定机型和版本 初始化 git安装 curl安装 同步源码 环境变量 创建aosp目录 指定同步版本 解下来安装编译需要的依赖 编译aosp源码 刷入系统 AOSP 全称 Android Open Source Project 是指Android开源项目&#xff0c;它是由Google主导的…

【Java】BMI身体质量指数计算工具

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍BMI身体质量指数计算工具的Java实现。 学其所用&#xff0c;用其所学。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c;下…