【Linux】解析信号的本质&相关函数及指令的介绍

news2024/10/22 6:28:32

前言

大家好吖,欢迎来到 YY 滴Linux系列 ,热烈欢迎! 本章主要内容面向接触过C++的老铁
主要内容含:
在这里插入图片描述

欢迎订阅 YY滴C++专栏!更多干货持续更新!以下是传送门!

  • YY的《C++》专栏
  • YY的《C++11》专栏
  • YY的《Linux》专栏
  • YY的《数据结构》专栏
  • YY的《C语言基础》专栏
  • YY的《初学者易错点》专栏
  • YY的《小小知识点》专栏
  • YY的《单片机期末速过》专栏
  • YY的《C++期末速过》专栏
  • YY的《单片机》专栏
  • YY的《STM32》专栏
  • YY的《数据库》专栏
  • YY的《数据库原理》专栏

目录

  • 一.信号的本质与相关概念
    • 1.体现中断的例子:<ctrl+c产生信号终止前台进程>
  • 二.系统定义的信号列表
    • 1.用kill -l命令可以察看系统定义的信号列表
    • 2.(ps&kill&raise&abort)进程指令&信号相关函数
      • 【总结】
      • 【1】ps指令
      • 【2】kill&raise函数介绍与演示
      • 【3】abort函数介绍与演示

一.信号的本质与相关概念

  1. 信号:是一种向目标进程发送通知消息的一种机制
  2. 信号本质:其实就是用软件,来模拟中断的行为(信号是进程之间事件异步通知的一种方式,属于软中断)
  3. 信号信号产生了,我们不一定要立即处理它,而是我们在合适的时候处理;我们要有一种能力,将已经到来的信号,
    进行暂时保存

1.体现中断的例子:<ctrl+c产生信号终止前台进程>

例如:

  • 我们在一个进程运行过程中,输入ctrl+c
  • 这个键盘输入产生一个硬件中断,被OS获取,解释成信号,发送给目标前台进程;前台进程因为收到信号,进而引起进程退出
[hb@localhost code_test]$ cat sig.c 
#include <stdio.h>
int main()
{
   while(1){
   printf("I am a process, I am waiting signal!\n");
   sleep(1);
 }
}
[hb@localhost code_test]$ ./sig 
I am a process, I am waiting signal!
I am a process, I am waiting signal!
I am a process, I am waiting signal!
^C
[hb@localhost code_test]$

二.系统定义的信号列表

1.用kill -l命令可以察看系统定义的信号列表

  • 每个信号都有一个编号和一个宏定义名称,这些宏定义可以在signal.h中找到
  • 例如其中有定 义 #define SIGKILL 9
    在这里插入图片描述

2.(ps&kill&raise&abort)进程指令&信号相关函数

【总结】

  1. kill命令是调用kill函数实现的。kill函数可以给一个指定的进程发送指定的信号。
  2. raise函数可以给当前进程发送指定的信号(自己给自己发信号)。
  3. abort函数使当前进程接收到信号而异常终止。

【1】ps指令

-- 这个命令会列出当前终端会话中的所有进程
ps
-- 可以通过grep命令来过滤出特定的进程,例如:
ps | grep <特定的进程>

【2】kill&raise函数介绍与演示

#include <signal.h>
int kill(pid_t pid, int signo);
int raise(int signo);
这两个函数都是成功返回0,错误返回-1
  • kill命令是调用kill函数实现的。
  • kill函数可以给一个指定的进程发送指定的信号。
  • raise函数可以给当前进程发送指定的信号(自己给自己发信号)

演示:在后台执行死循环程序,然后用kill命令给它发SIGSEGV信号

在这里插入图片描述

【3】abort函数介绍与演示

  • abort函数使当前进程接收到信号而异常终止
#include <stdlib.h>
void abort(void);
就像exit函数一样,abort函数总是会成功的,所以没有返回值。

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

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

相关文章

动态规划-简单多状态dp问题——LCR.091.粉刷房子

1.题目来源 题目来源&#xff1a;LCR.091.粉刷房子——力扣 测试用例 2.算法原理 下列矩阵表示粉刷每个房子的费用&#xff0c;对应颜色表示粉刷的油漆颜色 1.状态表示 创建一个n3的dp表&#xff0c;每一列代表第i个房子刷三个颜色中任意颜色的情况下花费的费用 dp[i][0]:第…

c语言字符函数

1&#xff0c;字符分类函数&#xff1a; 例如&#xff1a;写一个代码将字符串中的小写字母转化成大写字母 就可以用到上述islower函数判断字符是否是小写 2.字符转换函数 c语言提供了两个字符转换函数 1.int tolower (int c); //将输入进去的大写字母转化成小写 2,int …

AI开发者工具的双子星:Cursor与ChatGPT Canvas的区别

01—Cursor&#xff1a;沉浸式的开发体验 Cursor是一款旨在为开发者提供无缝编程体验的工具。它将AI的功能深度嵌入到开发者熟悉的环境中&#xff0c;便于在编码过程中获得即时帮助。开发者无需离开自己的操作界面&#xff0c;AI就能自动为其提供代码补全、错误检查和优化建议…

荣耀、中国移动、京东三强联合,开启产业链升级的“价值跃迁”

市场最大的不变就是变化&#xff0c;能够赢得跨越式发展的&#xff0c;往往是最能适应变化&#xff0c;并且开拓创新的企业。 在全行业数字化转型的当下&#xff0c;线上智能终端销售模式&#xff0c;正在迎来新的篇章。 10月12日&#xff0c;在2024中国移动全球合作伙伴大会…

买自动猫砂盆怎么不花冤枉钱?双十一高性价比自动猫砂盆推荐

平时出门在外面&#xff0c;真的有点来不及照顾猫咪的猫砂盆&#xff0c;导致粪便堆积的时间过长&#xff0c;污染干净的猫砂&#xff0c;猫砂盆长时间不清理&#xff0c;会增加细菌滋生的机会&#xff0c;从而增加猫咪尿路感染的风险。自动猫砂盆的自动铲屎很方便实用&#xf…

界面耻辱纪念堂--可视元素02

Leif Almberg 发给我们一个从 IBMs NetFinity&#xff08;一个管理网络和远程计算机的程序&#xff09;截取的图片。 这个图片由一大堆混乱的带边框的控件组成&#xff0c;这些控件占据了整个屏幕。由于他们希望把所有东西填充在一个单独对话框中&#xff0c;IBM 的设计者不得…

IPv6 DNS简介

IPv6网络中的每台主机都是由IPv6地址来标识的&#xff0c;用户只有获得待访问主机的IPv6地址&#xff0c;才能够成功实现访问操作。对于用户来讲&#xff0c;记住主机的IPv6地址是相当困难的&#xff0c;因此设计了一种字符串形式的主机命名机制&#xff0c;这就是域名系统。用…

HBuilder X 下载vue-router时 发生异常:npm ERR! code EPERM

一、异常 PS C:\Users\GL\Documents\HBuilderProjects\vj1> npm i vue-router3.6.5 npm ERR! code EPERM npm ERR! syscall mkdir npm ERR! path C:\Program Files\nodejs\node_cache\_cacache npm ERR! errno EPERM npm ERR! FetchError: Invalid response body while tr…

Vue3 集成 json-editor-vue3

简介 快速编辑json数据&#xff0c;还需要支持全屏编辑&#xff0c;以及json校验。 https://github.com/guyue88/json-editor-vue3 安装依赖 npm install json-editor-vue3 --save 引入 在 main.js中添加 import “jsoneditor”; 全局引入 import Vue from vue import Json…

【设计模式系列】模板方法模式

一、什么是模板方法模式 模板方法模式&#xff08;Template Method Pattern&#xff09;是一种行为型设计模式&#xff0c;它在父类中定义一个算法的框架&#xff0c;允许子类在不改变算法结构的情况下重写算法的某些特定步骤。这种模式非常适合于那些存在共同行为的类&#x…

CSS简单入门

一.简单概念 1.概念 层叠样式表&#xff0c;一种样式表语言&#xff0c;用来美化HTML文档的呈现。 2.书写位置 title标签下方添加style双标签&#xff0c;style标签里面书写CSS代码 &#xff08;1&#xff09;外部学习样式 <title>CSS使用</title> <sty…

【软件工程】数据流图DFD

文章目录 数据流图DFD概述一、数据流图的基本元素二、数据流图的绘制步骤三、数据流图的分层设计四、数据流图的绘制原则五、数据流图的应用 一个完整的数据流包含哪些要素从图中找出所有数据流1. **理解数据流图的结构**2. **识别外部实体**3. **追踪数据流**4. **记录数据流*…

在 MTT GPU 上使用 llama.cpp 推理

大语言模型因其出色的自然语言理解和生成能力而迅速被广泛使用&#xff0c;llama.cpp 大幅降低了进行大语言模型推理的门槛&#xff0c;MTT GPU 同样也是 llama.cpp 支持的运行平台&#xff0c;能够充分利用硬件的性能来助力用户的大语言模型应用。 本文主要介绍了如何在摩尔线…

如何设置JMeter界面的永久汉化?

1、找到jMeter安装目录下的bin目录 2、打开jmeter.properties文件&#xff0c;把第37行修改为"languagezh_CN"&#xff0c;保存&#xff0c;关闭 3、重启JMeter即可

程序员必读:精通ER图设计,解锁数据库高效构建秘籍

在信息技术的浩瀚星空中&#xff0c;数据库如同星辰般璀璨&#xff0c;而ER图&#xff08;Entity-Relationship Diagram&#xff0c;实体-关系图&#xff09;则是那把引领我们穿越数据迷雾的钥匙。对于每一位程序员而言&#xff0c;掌握ER图设计不仅是数据库设计的基础&#xf…

墙裂建议收藏,100道Python练手题目

目录 实例001&#xff1a;数字组合 实例002&#xff1a;“个税计算” 实例003&#xff1a;完全平方数 实例004&#xff1a;这天第几天 实例005&#xff1a;三数排序 实例006&#xff1a;斐波那契数列 实例007&#xff1a;copy 实例008&#xff1a;九九乘法表 实例009&…

【读书笔记·VLSI电路设计方法解密】问题14:什么是基底层和金属层

正如在问题13中讨论的,基底层用于前端工艺来制造NMOS和PMOS晶体管,而金属层用于后端工艺连接这些晶体管。在tapeout之后,每一层都需要专用的光掩膜来定义其图案。 基底层主要包括以下内容: n-well:用于定义n-well区域,这是硅晶片中的一种植入或扩散区域。有源区(active…

在 Linux 上使用 GPG 加解密文件

GnuPG&#xff0c;俗称 GPG&#xff0c;是一个非常通用的工具&#xff0c;被广泛用作电子邮件、信息、文件或任何你需要安全地发送给别人的东西的加密行业标准。 学习使用 GPG 很容易&#xff0c;你可以在几分钟内就学会使用它。 在本教程中&#xff0c;我将告诉你如何用 GPG…

JAVA高级工程师与你一起学习RabbitMQ保姆级基础教程

JAVA高级工程师与你一起学习RabbitMQ基础保姆级教程 1.前言 笔者我正在结合自己的实际工作经验重新把Java大数据技术栈总结梳理整合一遍&#xff01;重新学习&#xff01; 与大家一起重新学习RabbitMQ消息队列技术&#xff01;边学习边总结边分享边回顾&#xff01;学无止境&…

jmeter中设置属性值的注意事项

jmeter中&#xff0c;可以在beanshell sampler, jsr223 sampler中对变量、属性等做一些操作&#xff0c;使得测试脚本变得更有关联性和一致性&#xff0c;以便完成更好的测试工作。 但是&#xff0c;在实际运用中&#xff0c;设置属性值经常会有些情况需要注意。不是我们以为的…