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

signal( SIGINT, SigIntHandler )

signal 的第1个参数signum表示要捕捉的信号,第2个参数是个函数指针,表示要对该信号进行捕捉的函数,该参数也可以是SIG_DEF(表示交由系统缺省处理,相当于白注册了)或SIG_IGN(表示忽略掉该信号而不做任何处理)。signal如果调用成功,返回以前该信号的处理函数的地址,否则返回 SIG_ERR。

sighandler_t是信号捕捉函数,由signal函数注册,注册以后,在整个进程运行过程中均有效,并且对不同的信号可以注册同一个信号捕捉函数。该函数只有一个参数,表示信号值。
示例:
1、  捕捉终端CTRL+c产生的SIGINT信号:
#include 
#include 
#include 
#include 


void SignHandler(int iSignNo)
{
    printf("Capture sign no:%d ",iSignNo); 
}
 
int main()
{
    signal(SIGINT,SignHandler); 
    while(true) 
        sleep(1); 
    return 0; 
}

该程序运行起来以后,通过按 CTRL+c将不再终止程序的运行。应为CTRL+c产生的SIGINT信号已经由进程中注册的SignHandler函数捕捉了。该程序可以通过 Ctrl+终止,因为组合键Ctrl+能够产生SIGQUIT信号,而该信号的捕捉函数尚未在程序中注册。
2、  忽略掉终端CTRL+c产生的SIGINT信号:
#include 
#include 
#include 
#include 
 
int main()
{
    signal(SIGINT,SIG_IGN); 
    while(true) 
        sleep(1); 
    return 0; 
}

 

该程序运行起来以后,将CTRL+C产生的SIGINT信号忽略掉了,所以CTRL+C将不再能是该进程终止,要终止该进程,可以向进程发送SIGQUIT信号,即组合键CTRL+
 
3、  接受信号的默认处理,接受默认处理就相当于没有写信号处理程序:
 
#include 
#include 
#include 
#include 
 
int main()
{
    signal(SIGINT,DEF); 
    while(true) 
        sleep(1); 
    return 0; 
}

转载于:https://www.cnblogs.com/Ph-one/p/6840745.html

相关文章:

  • Linux下直接读写物理地址内存
  • 数学2考点
  • 2018考研全年备考规划,你还在等什么?
  • 复旦软件工程专业课
  • src源dst目标
  • linux 中mmap的用法
  • platform_set_drvdata 和 platform_get_drvdata
  • 内核Alsa之pcm
  • MT6737 Android N 平台 Audio系统学习----录音到播放录音流程分析
  • 双链表的初始化,建立,插入,查找,删除。
  • 顺序栈的初始化,建立,插入,查找,删除。
  • 顺序队列的初始化,建立,插入,查找,删除。
  • 链队列的初始化,建立,插入,查找,删除。
  • 链栈的初始化,建立,插入,查找,删除。
  • 顺序串的初始化,建立,插入,查找,删除。
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • 【前端学习】-粗谈选择器
  • 【跃迁之路】【699天】程序员高效学习方法论探索系列(实验阶段456-2019.1.19)...
  • 3.7、@ResponseBody 和 @RestController
  • iOS小技巧之UIImagePickerController实现头像选择
  • JavaScript的使用你知道几种?(上)
  • JS专题之继承
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • PermissionScope Swift4 兼容问题
  • python_bomb----数据类型总结
  • Redis 懒删除(lazy free)简史
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • 二维平面内的碰撞检测【一】
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 微信小程序开发问题汇总
  • 新版博客前端前瞻
  • No resource identifier found for attribute,RxJava之zip操作符
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • ​力扣解法汇总946-验证栈序列
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • $(selector).each()和$.each()的区别
  • (2)Java 简介
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (图)IntelliTrace Tools 跟踪云端程序
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • **CI中自动类加载的用法总结
  • .NET Core WebAPI中封装Swagger配置
  • .NET/C# 反射的的性能数据,以及高性能开发建议(反射获取 Attribute 和反射调用方法)
  • .set 数据导入matlab,设置变量导入选项 - MATLAB setvaropts - MathWorks 中国
  • @Transactional类内部访问失效原因详解
  • [ IO.File ] FileSystemWatcher
  • [] 与 [[]], -gt 与 > 的比较
  • [AR Foundation] 人脸检测的流程
  • [C#]手把手教你打造Socket的TCP通讯连接(一)
  • [C++] 默认构造函数、参数化构造函数、拷贝构造函数、移动构造函数及其使用案例
  • [CakePHP] 在Controller中使用Helper
  • [Deepin 15] 编译安装 MySQL-5.6.35