signal函数

【0205】Linux信号之signal函数 何为信号:信号就是由用户、系统或进程发送给目标进程的信息,以通知目标进程中某个状态的改变或是异常。硬中断和软中断。可细分为如下几种原因:①系统终端Terminal中输入特殊的字符来产生一个信号,比如按下:ctrl+\会产生SIGQUIT信号。②系统异常。比如访问非法内存和浮点数异常。③系统状态变化。如设置了alarm定时器,当该定时器到期时候会引起SIGVTALRM信号。④调用了kill命令或是kill函数。 阅读详情





signal函数

signal函数

信号


信号是软件中断.

  1. #include <signal.h>
  2. void (* signal(int signo, void(*func)(int)))(int);
  3. // 看起来确实听恐怖的, 不过就是两个参数, 下面来说说具体的参数
  4. // 错误返回SIG_ERR
  1. signo : 一个信号, 像SIGINT(终止信号), SIGALRM(超时信号)等.
    • SIG_IGN : 像内核表示忽略该信号(SIGKILL, SIGSTOP不能忽略)
    • SIG_DFL : 系统默认的信号动作
    • SIG_ERR : 信号错误
  2. void(*func)(int) : 一个传入int类型, 无返回值的函数
  1. /*************************************************************************
  2. > File Name: signal__捕捉信号.cpp
  3. > Author: Function_Dou
  4. > Mail:
  5. > Created Time: 2018年02月06日 星期二 19时58分52秒
  6. ************************************************************************/
  7. #include <stdio.h>
  8. #include "apue.h"
  9. #include <signal.h>
  10. static void sig_usr(int);
  11. int main(void)
  12. {
  13. if(signal(SIGUSR1, sig_usr) == SIG_ERR)
  14. err_sys("signal(SIGUSR1) error");
  15. if(signal(SIGINT, sig_usr) == SIG_ERR)
  16. err_sys("signal(SIGINT) error");
  17. // 一直等待, 使进程挂起, 直到捕捉到一个信号为止
  18. for( ; ; )
  19. pause();
  20. exit(0);
  21. }
  22. void sig_usr(int signo)
  23. {
  24. if(signo == SIGUSR1)
  25. printf("SIGUSR1\n");
  26. if(signo == SIGINT)
  27. printf("SIGINT\n");
  28. else
  29. printf("signal error");
  30. }
  31. /* 样例
  32. [root@localhost Signal]# ./a.out &
  33. [2] 10786
  34. [root@localhost Signal]# kill -USR1 10786
  35. SIGUSR1
  36. [root@localhost Signal]# ./a.out
  37. ^CSIGINT
  38. ^CSIGINT
  39. ^CSIGINT
  40. */

当然有一点, 在exec()中信号捕捉是没有意义的, 而在fork()中信号捕捉是有意义的.

可靠与不可靠信号

可靠信号 : 当前的信号数大于处理信号的速度, 未处理的信号会进入队列, 等待处理, 信号不会丢失.
不可靠信号 : 当其信号数大于处理信号的速度, 未处理的信号会忽略, 丢弃. 当发生阻塞时, 产生的信号将丢弃.

可靠信号不会丢弃信号, 全部处理. 不可靠信号会丢弃多余的信号

中断与重入

中断 : 系统遇到紧急处理事件, 暂时中止CPU现在运行的程序, 等待处理完了再返回进行中止的程序.但是, 有些程序中断之后就不能恢复在接着进行.

一个可重入的函数简单来说,就是:可以被中断的函数。

就是说,你可以在这个函数执行的任何时候中断他的运行,在任务调度下去执行另外一段代码而不会出现什么错误。
而不可重入的函数由于使用了一些系统资源,比如全局变量区,中断向量表等等,所以他如果被中断的话,可能出现问题,所以这类函数是 不能运行在多任务环境下的。

  1. 什么情况下是不可重入的呢?
    (1)函数体内使用了静态的数据结构, 使用全局变量;
    (2)函数体内调用了malloc()或者free()函数;
    (3)函数体内调用了标准I/O函数。
    • 保证能够中断是安全的函数


数据中心——Vxlan基本概念1 东西流量指的就是横向流量-------例如:服务器与服务器之间交换流量南北流量指的就是纵向流量-------例如:客户端和服务器之间的流量以下主要是讲解业务平面的网络架构(一般业务平面就需要用到专用的数据中心交换机) 阅读详情

相关推荐

基因组研究之单倍型T2T基因组(一)

单倍型T2T基因组(Haplotype-resolved T2T genome)是一种高精度、高连续性、高完整性的基因组组装技术,它能够提供从端粒到端粒的完整基因组序列,包括所有的基因和非编码序列。完整覆盖:T2T基因组覆盖从端粒到端粒的染色体序列,包含所有的基因和非编码序列,包括以往难以解析的端粒和着丝粒区域。单倍型解析:单倍型T2T基因组能够区分来自父母本的遗传信息,进行亚基因组不对称演化研究,挖掘单倍型等位基因间的表达差异,这对于重测序、性状定位、进化、基因功能、基因编辑等研究至关重要。

2401_89507557的博客 2438

Linux信号(signal) 机制分析

【摘要】本文分析了Linux内核对于信号的实现机制和应用层的相关处理。首先介绍了软中断信号的本质及信号的两种不同分类方法尤其是不可靠信号的原理。接着分析了内核对于信号的处理流程包括信号的触发/注册/执行及注销等。最后介绍了应用层的相关处理,主要包括信号处理函数的安装、信号的发送、屏蔽阻塞等,最后给了几个简单的应用实例。 【关键字】软中断信号,signal,sigaction,kill,sig

Chris.Xiao 2565

AI视频生成提示词工程:结构化公式与实战案例详解

在实际使用 AI 生成视频或图像时,最常遇到的困惑是:为什么我的提示词(Prompt)生成的画面总是不理想?是模型能力不足,还是我的描述有问题?答案往往是后者。提示词工程(Prompt Engineering)并非简单的“翻译”需求,而是一门需要结构化思维和精准描述的技能。它决定了 AI 能否准确理解你的意图,并生成符合预期的视觉内容。 本文将通过两个核心案例,深入拆解提示词的构建逻辑。第一个案例聚焦于“文生视频”,我们将学习如何将一个简单的想法,如“小猫在雪地里玩雪球”,通过结构化公式扩展为一段富有细节和

weixin_30800987的博客 563

【APUE】7、signal函数

我们进程结束的信号是TERM,注意这个信号我们要捕获的话,要注意退出程序,不然一般杀不掉这个程序,除非强制杀死 /** * 功能:一个简单的信号机制 * 时间:2015年12月20日16:49:06 * 作者:cutter_point */ #include "../util/apue.h" #include "../util/error.c" static void sig_usr(

cutter_point的专栏 1311

尚硅谷 Vue2.0 + Vue3.0 入门到精通教程学习笔记 (一)

本文为总结尚硅谷Vue2.0+Vue3.0 的学习笔记系列的第一章——Vue的核心,包含Vue简介、模板语法、数据绑定、MVVM模型、事件处理,计算属性与监视、class与style绑定、列表渲染、过滤器、内置指定和自定义指令以及Vue生命周期等知识点

weixin_44566194的博客 3655

LobeHub开源AI应用平台:从部署到定制的全栈实践指南

在现代AI应用开发领域,大语言模型(LLM)的集成与部署是核心技术挑战之一。其原理在于通过API或本地化部署,将预训练模型的强大能力封装为可调用的服务。这项技术的核心价值在于极大地降低了AI应用的开发门槛,使开发者能够快速构建智能对话、内容生成等场景的应用。随着模型即服务(MaaS)模式的普及,一个关键痛点是如何高效地管理多模型、设计友好的用户界面并实现功能扩展。这正是开源项目LobeHub所聚焦的领域,它通过提供可插拔的架构和配置驱动的低代码理念,解决了AI能力落地的“最后一公里”问题。本文将结合Dock

weixin_27210125的博客 754

Linux signal 那些事儿(4)信号的deliver顺序

Linux signal 那些事儿(4)信号的deliver顺序 2014-01-18 14:12:18 分类: LINUX     上一篇博文提到了,如果同时有多个不同的信号处于挂起状态,kernel如何选择deliver那个信号。          next_signal 负责从挂起信号中选择deliver的signo:当然,有线程显存私有的penging,

raidtest的专栏 1080

第1章:Zephyr 开发环境搭建与 Hello World

📝【摘要】本文是Zephyr RTOS开发入门指南的第一章,详细介绍了从环境搭建到首个应用运行的完整流程。主要内容包括:1️⃣ Zephyr项目结构解析与west工具链部署;2️⃣ 开发环境配置(Linux/WSL)及SDK安装;3️⃣ 两种实践路径——官方HelloWorld样例与自定义应用开发;4️⃣ 实际硬件部署方法(nRF/STM32)及常用west命令速查;5️⃣ 典型问题解决方案。通过qemu_x86模拟器演示了基础打印功能实现,为后续深度开发奠定基础。

hemoparrot的专栏 1361

Linux Signal (7): sigaction

sigaction函数是用作检查/修改与指定信号相关联的处理动作. 在UNIX早期版本中使用signal, 后来改用了sigaction, 可见它的功能比signal要强大. 另外, signal函数也是可以用sigaction实现的.1. sigaction原型:#include signal.h>int sigaction(int signo, const struct sigac

代威涛的主页 7164

YOLOv11 改进入门篇 | 轻量级涨点技巧:GhostConv 替代普通卷积的实战指南

摘要: 本文介绍如何通过GhostConv改进YOLOv11,实现轻量化涨点。YOLOv11深度增加导致参数量、延迟和内存占用上升,GhostConv通过“本征特征+线性变换”策略,在精度几乎无损的情况下降低30%-50%计算量。文章详细解析GhostConv原理,对比普通卷积的参数量和FLOPs优势,并提供完整的代码级改造流程,包括模块实现、注册及网络配置。实验表明,该方法有效提升边缘端推理效率,适用于移动端等资源受限场景。

shrgegrb的博客 1656

Xilinx/AMD公司7系列FPGA的ISERDESE2仿真的”天坑”(附verilog的源码vivado仿真工程)

研究LVDS输出接口的ADC与7系列(ZYNQ)FPGA对接过程中,在Vivado中搭建了ISERDESE2的仿真工程,仿真结果ISERDESE2的并行输出口一直输出X或Z,这个坑之大,耗费了我数天的时间,可以称为“天坑”了。同步复位的要求肯定是高于异步复位的,古话说得好“两害相权取其轻”,所以,跟古话对着干就对了!就当RST是同步复位吧,最后经过反复验证,发现。开始怀疑复位信号是否高电平持续时间不够长?但是没有查到复位时间的要求 : - (

FPGA艺术家的博客 171

Linux信号signal介绍,signal()函数,sigaction()函数

signal( SIGINT, SigIntHandler ); /* Ctrl-C handler */       static int     b_ctrl_c = 0;       static int     b_exit_on_ctrl_c = 0; /* Signal types */ #define SIGINT          2       /*

gx19862005的专栏 6617

基于本机知识库 + 豆包(火山引擎)+ MCP的落地方案

最小 MVP:本地知识库 + Doubao Embedding + 简单检索。工具化:把检索/写入/系统功能通过 MCP 封装。Agent 编排:RAG 流程 + 自检 + 引用输出。这样你就可以快速落地一个基于豆包 + 本机知识库的 MCP Agent。

lpfasd123的博客 1096

Signal ()函数详细介绍

1. 功能设置某一信号的对应动作2. 声明#include &lt;signal.h&gt; typedef void (*sighandler_t)(int); sighandler_t signal(int signum, sighandler_t handler);1233. 参数说明 第一个参数signum:指明了所要处理的信号类型,它可以取除了SIGKILL和SIGSTOP外的任何一种信...

yyyljw的博客 2万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Linux中signal函数

signal函数介绍 #include <signal.h> signal(参数1,参数2); 参数1:我们要进行处理的信号。系统的信号我们可以再终端键入kill -l查看(共64个)。其实这些信号时系统定义的宏。 参数2:我们处理的方式(是系统默认还是忽略还是捕获)。 有3种操作方式。 (1)eg: signal(SIGINT ,SIG_ING ); (2)eg: signal(SIGINT ,SIG_DFL ); (3)void ( signal( int sig, void ( handl

人生当苦无妨 2887

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

signal函数的返回值究竟是什么?

signal的返回值是指向之前的信号处理程序的指针。(之前的信号处理程序,也就是在执行signal(signo,func)之前,对信号signo的信号处理程序) #include <stdio.h> #include <signal.h> static void SignalHandler1(int signo) { printf("\nhaha\n")...

chezhai的博客 7603

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

linux下signal()函数超详细介绍

1. 功能 设置某一信号的对应动作 2. 声明 #include &lt;signal.h&gt; typedef void (*sighandler_t)(int); sighandler_t signal(int signum, sighandler_t handler); 3. 参数说明  第一个参数signum:指明了所要处理的信号类型,它可以取除了SIGKILL和SIGSTO......

魏波 2万+

signal函数详解

UNIX系统信号机制最简单的接口是signal函数

m0_61907339的博客 1820

signal()函数说明

表头文件#include 功 能:设置某一信号的对应动作 函数原型:void (*signal(int signum,void(* handler)(int)))(int); 或者:typedef void(*sig_t) ( int ); sig_t signal(int signum,sig_t handler); 参数说明: 第一个参数signum指明了所要处理的信号类型,它可以

软件工程 1382

[Linux]信号的产生和signal函数

Linux下信号的产生、signal函数捕捉信号

我的博客 1003

signal函数原型解读

今天复习信号,被函数指针和signal函数的原型绕住了,看了几篇博客,这里记录一下。 以下内容摘自signal() 函数详解,想要理解signal的原型,要先理解返回值是函数指针的函数指针所指向的函数的形式,说起来有点绕,就是说定义一个函数指针,这个指针指向一个返回值是函数指针的函数。 void ( signal( int sig, void ( handler)( int )))( int );...

weixin_40746176的博客 2384

Signal函数

Signal函数: 这个函数是一种系统调用,就是告诉系统发生中断的时候用该干嘛。第一个参数就是信号的编号,第二个参数就是信号的指针。 原型: #include <signal.h> void ( *signal(int sig, void (*handler)(int)) ) (int); 第一个参数sig:要传入需要修改处理函...

weixin_34055787的博客 639

signal函数说明

<br />c traps and pitfalls 对signal函数解释得非常详细。<br /><signal.h> 中<br />void ( *signal( int sig, void (* handler)( int ))) ( int );<br />int (*p)();<br />这是一个函数指针, p所指向的函数是一个不带任何参数, 并且返回值为int的一个函数.<br />int (*fun())();<br />这个式子与上面式子的区别在于用fun()代替了p,而fun()是一个函数

adermxl的专栏 650

【Linux函数】Signal ()函数详细介绍

1. 功能设置某一信号的对应动作2. 声明#include <signal.h> typedef void (*sighandler_t)(int); sighandler_t signal(int signum, sighandler_t handler);3. 参数说明 第一个参数signum:指明了所要处理的信号类型,它可以取除了SIGKILL和SIGSTOP外的任何一种信号。   第二个参

华秋实的专栏 6万+

Linux 中的 Signal 函数

此外,如果在信号处理函数执行时进程收到了同类型的信号,该信号会被存储而不会中断信号处理函数的执行,直到信号处理函数执行完毕再重新调用相应的处理函数。但如果在信号处理函数执行时进程收到了其他类型的信号,该函数的执行就会被中断。Signal函数的基本用法涉及到设置信号处理器(handler),这是当特定信号到达时将被调用的函数。在上述例子中,每当用户按下Ctrl+C,signal_handler函数就会被调用,并打印出信号的编号。SIG_DFL:恢复信号的默认行为(如 SIGINT 默认终止进程)。

aaaaa_xiaowang的博客 823

signal函数的缺点

signal函数的缺点: 1.函数的原型     typedef void(*sighandler_t)(int);     sighandler_t signal(int signum, sighandler_t  handler);     其中handler指定当信号signum发生时的行为,可取以下三个值:SIG_IGN,SIG_DEL,函数地址。 2.当一个信号发生时,根据h

zhjutao的专栏 1449
上一篇: 进程关系
下一篇: 关于SIGHCLD和SIGCLD
Function_18
博客等级 码龄10年 193粉丝 239原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值