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

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

前言

大家好吖,欢迎来到 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获取,解释成信号(2号信号SIGINT),发送给目标前台进程;前台进程因为收到信号,进而引起进程退出
[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
  • 同时1-30号信号称作 “普通信号” ,30-64称为 “实时信号”
    在这里插入图片描述
  1. 普通信号:

早期Unix版本中系统提供的信号类型,通常用于进程间的简单通信或通知。
数量有限,且部分信号(如SIGKILL和SIGSTOP)不能被捕获或忽略。

  1. 实时信号:

实时信号是POSIX.1标准中引入的一种信号类型,旨在提供比普通信号更可靠、更灵活的通信机制。
在Linux系统中,实时信号的整数编号从32(SIGRTMIN)到63(SIGRTMAX),共32个。

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.kler.cn/news/354445.html

相关文章:

  • UI自动化测试 —— web端元素获取元素等待实践!
  • 国产游戏技术:迈向全球引领者的征途
  • 2.计算机网络_IP地址
  • React 探秘(一):fiber 架构
  • 自动驾驶系列—探索自动驾驶持续部署(CD)技术与最佳实践
  • UE5 猎户座漂浮小岛 01 资源 玩家角色
  • 从2.x到3.x:Spring Boot升级实战踩坑记录!
  • Go语言中的时间比较与时区处理
  • 利用Microsoft Entra Application Proxy在无公网IP条件下安全访问内网计算机
  • 代码训练营 day34|LeetCode 134,LeetCode 135,LeetCode 860,LeetCode 406
  • 根据Vue对比来深入学习React 下 props 组件传值 插槽 样式操作 hooks 高阶组件 性能优化
  • 如何使用Python合并Excel文件中的多个Sheet
  • 【ARM 嵌入式 编译系列 10.9 -- Clang 编译器】
  • Redis中String类型常见的应用场景
  • Android中的IntentService及其作用。
  • 编辑器、节点树、基础设置
  • LDR6500协议芯片:诱骗取电协议,OTG数据同时实现功能芯片
  • Mytatis-plus使用sl4j日志打印SQL
  • 【Vue】Vue 3 中的 ref 函数与 React 中的 useState 钩子的对比
  • uniapp小程序监听外接扫描枪