首页 > 其他分享 >signal - 注册信号处理函数

signal - 注册信号处理函数

时间:2023-11-19 19:46:47浏览次数:35  
标签:old 函数 signal handler SIG 注册 信号处理

Unix系统提供了signalsigaction两种改变信号处理函数的方法。signal是设置信号处理函数的原始API, 比sigaction简单且功能少。

  • signal()无法在不改变信号处理函数的同时,还能获得当前的信号处理函数,但sigaction()可以

signal在UNIX实现间存在差异,对可移植性有要求的程序不能使用此调用来建立信号处理函数,sigaction是建立信号处理器的首选API

#include <signal.h>

void (*signal(int sig, void(*handler)(int)))(int);

参数:

  • sig标识希望修改处理函数的信号编号,如SIGINT,SIGTERM
  • handler标识信号抵达时所调用函数的地址。

返回值:

  • 调用成功,返回之前的sig信号的处理函数
  • 调用失败,返回SIG_ERR

信号处理函数的形式一般为:

void handler(int sig) {
  // Code for handler
}

当指定handler参数时,可以使用SIG_DFLSIG_IGN来代替函数地址:

  • SIG_DFL:将信号的处理函数重置为默认值
  • SIG_IGN: 忽略该信号。内核会将信号丢弃,进程甚至不知道产生过该信号
typedef void (*sighandler_t)(int);

// register new handler and remember old handler
sighandler_t old_handler = signal(SIGINT, new_handler);
if (old_handler == SIG_ERR) {
  // Error and exit
}

// do something

// restore old handler
if (signal(SIGINT, old_handler) == SIG_ERR) {
  // Error and exit
}

标签:old,函数,signal,handler,SIG,注册,信号处理
From: https://www.cnblogs.com/SchemaL/p/17842396.html

相关文章

  • SpringCloud应用集成Nacos服务注册与发现
    SpringCloud应用集成Nacos服务注册与发现官方文档第一步:引入依赖版本见=>附录:根pom文件=>版本控制片段www.cnblogs.com/anhaoyan... <!--引入nacos用于服务注册与发现--><dependency><groupId>com.alibaba.cloud</groupId><artifact......
  • SpringCloud应用集成Nacos服务注册与发现
    SpringCloud应用集成Nacos服务注册与发现官方文档第一步:引入依赖版本见=>附录:根pom文件=>版本控制片段www.cnblogs.com/anhaoyan... <!--引入nacos用于服务注册与发现--><dependency><groupId>com.alibaba.cloud</groupId><artifact......
  • win10注册表的备份与恢复;对“未将所有数据都成功写入到注册表中。某些项是由系统或其
    为什么要备份注册表呢?现在网络上的软件下载渠道良莠不齐,一不小心就给你一个全家桶服务,而仅仅是通过控制面板将它们卸载是删不干净的,鬼知道它们在电脑的注册表上留下了什么。所以在从不知名网站下载一些软件之前,对注册表进行备份,若出了什么问题,事后对注册表进行恢复是最便捷的方式了......
  • 信号的机制——信号处理函数的注册
    在Linux操作系统中,为了响应各种各样的事件,也是定义了非常多的信号。我们可以通过kill-l命令,查看所有的信号。#kill-l1)SIGHUP2)SIGINT3)SIGQUIT4)SIGILL5)SIGTRAP6)SIGABRT7)SIGBUS8)SIGFPE9)SIGKILL10)......
  • vue~全局插件和全局方法的注册
    本文介绍如何在vue中定义插件,注册插件和使用插件插件目录/src/plugins插件入口文件/src/plugins/index.jsimportcachefrom'./cache'importmodalfrom'./modal'//安装默认插件,在main.js中引入,通过Vue.use()使用它,因为index.js里使用exportdefault导出,所有在main.js里导入......
  • SignalR 分布式部署
    分布式部署意味着有多台SignalR服务器,一台服务器有多个客户端连接。SignalR要求对于某一个特定连接的所有HTTP请求都需要被一个相同服务进程处理,当SignalR运行在一个服务场时(多个服务器),则必须使用“粘性会话”(服务器开启)或者”跳过协商“(用websocket)问题:某一个客户端给服务器......
  • 优盘 注册表
    1、运行REGEDIT,2、展开HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet,3、右击Control项,选择新建,重命名新建项为WriteProtect,并设置其值为00000001(十六进制),然后刷新即可.4、若要取消对闪存写保护的限制,将值改为00000000即可. 2. 禁用U盘:1、运行REGEDIT,2、展开HKEY_LO......
  • 微服务 搭建 Eureka 注册中心
     代码示例:启动类: @SpringBootApplication@EnableEurekaServer//自动装配的开关publicclassEurekaApplication{publicstaticvoidmain(String[]args){SpringApplication.run(EurekaApplication.class,args);}}application.yml配置文件: serv......
  • 微服务系列-基于Spring Cloud Eureka进行服务的注册与消费
    公众号「架构成长指南」,专注于生产实践、云原生、分布式系统、大数据技术分享。在之前的几个教程中,我们学了:使用RestTemplate的SpringBoot微服务通信示例使用WebClient的SpringBoot微服务通信示例使用SpringCloudOpenFeign的SpringBoot微服务通信示例在......
  • SignalR
    一、简介    为ASP.NET开发人员提供的一个库,可以简化开发人员将实时Web功能添加到应用程序的过程。实时Web功能是指这样一种功能(聊天室,股票交易,微信角标,站内消息):当所连接的客户端变得可用时服务器代码可以立即向其推送内容,而不是让服务器等待客户端请求新的数据。......