linux下signal()软中断信号

2023-11-05

一、signal()信号的功能

软中断信号(signal,又简称为信号)用来通知进程发生了异步事件,在软件层次上是对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求是一样的。

二、使用

添加头文件#include <signal.h>
下面是函数原型,第一个是信号处理回调函数,第二个是signal函数的原型

typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);

三、参数解读

函数原型:sighandler_t signal(int signum, sighandler_t handler);
第一个参数signum:所要处理的信号类型,它可以是除了SIGKILL和SIGSTOP外的任何一种信号。  
第二个参数handler:描述了与信号关联的动作,它可以取以下三种值:
1、SIG_IGN 表示忽略该信号。

//验证SIG_IGN
#include<stdio.h>
#include<unistd.h>
#include<signal.h>
#include<stdlib.h>
int main()
{
    int i=0;
    signal(SIGINT,SIG_IGN);//SIGINT是ctl c发起的信号
    //SIG_IGN表示忽略接收到的信号,这时信号是不执行的
    for(i=0;i<10;++i)//执行10秒
    {
        printf("ignore the signal:%d\n",i);
        sleep(1);
    }
    return 0;
}

2、SIG_DFL 表示恢复对信号的系统默认处理。不写此处理函数默认也是执行系统默认操作。
例:

#include <stdio.h>
#include <signal.h>
int main(int argc, char *argv[]) 
{
    signal(SIGINT, SIG_DFL);
    for(i=0;i<10;++i)//执行10秒
    {
        printf("ignore the signal:%d\n",i);
        sleep(1);
    }
    return 0;
}

3、sighandler_t类型的回调函数指针
函数的声明

typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);

例:

#include <stdio.h>
#include <signal.h>
#include <unistd.h>  //使用usleep必须添加的头文件
static bool canExit = false;

void sigroutine(int dunno)
{
    switch (dunno)
    {
    case SIGUSR1:
        CLog::debug("Get a signal -- SIGUSR1\n");
        canExit = true;
        break;
    case SIGHUP:
        CLog::debug("Get a signal -- SIGHUP\n");
        canExit = true;
        break;
    case SIGINT:
        CLog::debug("Get a signal -- SIGINT\n");
        canExit = true;
        break;
    case SIGTERM:
        canExit = true;
        CLog::debug("Get a signal -- SIGTERM\n");
        break;
    }
}

int main(int argc, char *argv[]) 
{
	signal(SIGINT, sigroutine);  //接收到信号,就会调用sigroutine函数
	signal(SIGUSR1, sigroutine);
	while(!canExit )
		usleep(500 * 1000);
}

这个例子就是用来接收某个信号,来结束主线程,然后直接退出进程

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux下signal()软中断信号 的相关文章

  • 使用 Vala 和 GLib 的正则表达式

    有没有一个函数 比如http php net manual en function preg match all php http php net manual en function preg match all php 使用 GLibh
  • 删除 Python 中某些操作的 root 权限

    在我的 Python 脚本中 我执行了一些需要 root 权限的操作 我还创建并写入文件 我不想由 root 独占所有 而是由运行我的脚本的用户独占所有 通常 我使用以下命令运行脚本sudo 有办法做到上述吗 您可以使用以下方式在 uid
  • sudo pip install python-Levenshtein 失败,错误代码 1

    我正在尝试在 Linux 上安装 python Levenshtein 库 但每当我尝试通过以下方式安装它时 sudo pip install python Levenshtein 我收到此错误 命令 usr bin python c 导入
  • “./somescript.sh”和“. ./somescript.sh”有什么区别

    今天我按照一些说明在 Linux 中安装软件 有一个需要首先运行的脚本 它设置一些环境变量 指令告诉我执行 setup sh 但是我执行时犯了一个错误 setup sh 所以环境没有设置 最后我注意到了这一点并继续进行 我想知道这两种调用脚
  • 在Linux中使用C/C++获取机器序列号和CPU ID

    在Linux系统中如何获取机器序列号和CPU ID 示例代码受到高度赞赏 Here http lxr linux no linux v2 6 39 arch x86 include asm processor h L173Linux 内核似
  • ARM 的内核 Oops 页面错误错误代码

    Oops 之后的错误代码给出了有关 ARM EX 中的恐慌的信息 Oops 17 1 PREEMPT SMP在这种情况下 17 给出了信息 在 x86 中它代表 bit 0 0 no page found 1 protection faul
  • php56 - CentOS - Remi 仓库

    我刚刚在测试盒上安装了 php 5 6 正常的 cli php 解释器似乎不存在 gt php v bash php command not found gt php56 v PHP 5 6 13 cli built Sep 3 2015
  • 如何从外部模块导出符号?

    我在内核源代码树之外进行编码 有两个模块 第一个printt有一个功能printtty 将字符串打印到当前 tty 以及第二个模块hello这会调用printtty 在初始化期间 我已经添加了EXPORT SYMBOL printtty 在
  • bash "&" 不打印 "[1]+ Done "

    我在 bashrc 中调用一个脚本来打印打开终端时收到的新消息数 我希望该调用在访问网络时是非阻塞的 有时需要几秒钟 这意味着我无法使用终端直到完成 但是如果我输入 mailcheck 在我的 bashrc 中 它工作正常 但然后打印一个空
  • Laravel 内存问题?

    各位 我在 DO 服务器上遇到这样的问题 我已经尝试了一切 整个网站在使用 Homestead 的 Linux 服务器上 100 正常工作 但上传后 它只能工作一次 在重新加载或刷新页面后会多次下降 我尝试增加 apache 服务器的内存
  • _dl_runtime_resolve -- 共享对象何时加载到内存中?

    我们有一个对性能要求很高的消息处理系统 最近我们注意到第一条消息比后续消息花费的时间要长很多倍 当它通过我们的系统时 会发生大量转换和消息增强 其中大部分是通过外部库完成的 我刚刚描述了这个问题 使用 callgrind 将仅一条消息的 运
  • 动态加载库和共享全局符号

    由于我在动态加载的库中观察到全局变量的一些奇怪行为 因此我编写了以下测试 首先我们需要一个静态链接库 头文件test hpp ifndef BASE HPP define BASE HPP include
  • shell中基于正则表达式的颜色突出显示输出

    我想知道是否可以用颜色突出显示与某些字符串匹配的 shell 命令的输出 例如 如果我运行 myCommand 输出如下 gt myCommand DEBUG foo bar INFO bla bla ERROR yak yak 我希望所有
  • 选择多个模式的 awk 代码

    这是我的输入文件 比如modified txt r4544 n479826 2012 08 28 07 12 33 0400 Tue 28 Aug 2012 1 line Changed paths M branches 8 6 0 con
  • C/C++ with GCC:静态地将资源文件添加到可执行文件/库

    有人知道如何使用 GCC 将任何资源文件静态编译为可执行文件或共享库文件吗 例如 我想添加永远不会改变的图像文件 如果它们改变了 我无论如何都必须替换该文件 并且不希望它们位于文件系统中 如果这是可能的 我认为这是因为 Visual C f
  • 尝试编译 git 但在 linux 中找不到 libcurl

    我想编译支持 http https 的 git 我有 ls usr include curl curlbuild h curl h curlrules h curlver h easy h mprintf h multi h stdchea
  • 如何从 Linux 命令行打开 Sublime Text 2 文件到选项卡,而不是新窗口

    我有 ST2 设置 这样我就可以执行 sublime file txt 它将在 ST2 窗口中打开 但是我怎样才能让它在当前打开的窗口的新选项卡中打开呢 尝试 Sublime 命令行帮助 subl 帮助 Sublime Text 2 内部版
  • 无法使用 tar -cvpzf 解压完整目录

    把我的头敲在这上面 I used tar cvpzf file tar gz压缩一个完整的目录 我将文件移动到另一台服务器 并尝试解压缩复制存档的目录 无法使其发挥作用 bash 3 2 tar xvpzf news tar gz tar
  • mod_perl 无法看到 /tmp 中的文件

    我有一些 mod perl 代码试图访问 tmp 下的文件 但它抛出 没有这样的文件或目录 错误 我在代码中添加了一个 ls al tmp 来查看 Perl 在目录中看到的内容 它只给了我 和 drwxrwxrwt 2 root root
  • 在Linux中执行jar文件[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我创建了一个可执行的 Java jar 文件 也就是说 我将 java 程序正确打包到 jar 文件中 包括 META INF MANIFEST 文件

随机推荐

  • ServerletContext

    ServerletContext ServerletContext是一种各serverlet项目间互相传输数据的存储器 外链图片转存失败 源站可能有防盗链机制 建议将图片保存下来直接上传 img s29palnw 1613542859309
  • c++基础 STL 第三篇:(deque容器和stack容器)

    文章目录 一 deque 的基本概念 二 deque 的构造函数 三 deque 的赋值操作 四 deque 的大小操作 五 deque 的插入和删除 六 deque 的数据获取 七 stack 的基本概念 八 stack 的常用接口 一
  • 配置文件及日志文件脱敏

    配置文件脱敏 使用原因 在项目中 经常需要在配置文件里配置一些敏感信息 比如数据库用户名和密码 redis mq的连接信息等 如果直接写明文 很容易造成密码泄露等安全问题 jasypt简介 Jasypt是一个Java库 它允许开发者以最小的
  • 文档在线预览(四)使用js前端实现word、excel、pdf、ppt 在线预览

    文章目录 实现方案 一 docx文件实现前端预览 1 docx preview 2 Mammoth 二 PDF文件实现前端预览 1 pdf js 2 pdfobject js 3 vue pdf 4 iframe object embed
  • 【高等数学重点题型篇】——一元函数微分学的应用

    本文仅用于个人学习记录 使用的教材为汤家凤老师的 高等数学辅导讲义 本文无任何盈利或者赚取个人声望的目的 如有侵权 请联系删除 文章目录 一 证明f n
  • [当人工智能遇上安全] 7.基于机器学习的安全数据集总结

    您或许知道 作者后续分享网络安全的文章会越来越少 但如果您想学习人工智能和安全结合的应用 您就有福利了 作者将重新打造一个 当人工智能遇上安全 系列博客 详细介绍人工智能与安全相关的论文 实践 并分享各种案例 涉及恶意代码检测 恶意请求识别
  • unity3d小小白之改变地面的颜色质感

    如果不知道怎么建地面 可以看上一个随笔噢 这样看起来很冰山诶 换颜色呢 要先把unity3d自带的基础素材导入噢 如果你有自己的素材也是可以导入的 只不过要放在assets文件中 最好建个专门的文件夹存放图片 pigPhoto catPho
  • 深入 Spring 系列之静态资源处理

    1 背景 前一段时间 WebIDE 开源的过程中 无意间接触到 webjars 觉得比较有趣 于是研究并整理了一下 webjars 是将前端的库 比如 jQuery 打包成 Jar 文件 然后使用基于 JVM 的包管理器 比如 Maven
  • 键盘控制ElementPlus树形控件展开收起选中功能

    需求 1 当树形控件获取焦点后 可通过键盘上下键来选中节点 2 当存在子节点时 键盘左键展开树 键盘右键收起树 注意 通过上下键来选中数据节点时 只有canFocus为true的节点才能被选中 移动键盘上下键 切换树节点选中项 不执行树的点
  • 记一次APP去壳破解重新打包

    1 拿到apk包时 第一步先判断是否加壳 加的是什么壳 在手机上或者虚拟机上用MT管理器找到对应的apk包 可以看的这个包虽然说是未加固 但还有个伪百度加固 其实也就是加了百度的壳的 2 利用BlackDex32进行去壳 在手机或虚拟机上安
  • 泉州港unityAR方面总结

    环境配置 打包apk环境配置 安装jdk 和安卓SDK 版本要足够高 打开unity 中edit目录下的 首选项 选择SDK和JDK路径 3 Ctrl shift B打开 build Settings选项框 点击选择并转换为Android平
  • Java JDBC 基础

    文章目录 快速入门 使用的步骤 JDBC api 数据库连接的方式 获取驱动的两种方式 获取链接的方式 通过写配置文件来获取链接 tips ResultSet结果集 PreparedStatement 编写JDBCUtils工具类 事务 批
  • 【单片机毕业设计】【mcuclub-308】紫外线消毒灯

    设计简介 项目名 基于单片机的紫外线消毒灯控制系统设计 标准版 基于单片机的室内消毒灯控制系统设计 标准版 基于单片机的智能消毒控制系统设计 标准版 单片机 STC89C52 功能简介 1 通过时钟模块获取当前的时间 并能实现掉电保存时间
  • python下的一些特殊属性(几个实例说明)

    python下的一些特殊属性 几个实例说明 实例1 python view plain copy coding UTF 8 class FirstDemo object 这里是一个doc a 10 类属性 def demo self 第一个
  • NTC热敏电阻温度计算方法,B值法

    1 概述 NTC热敏电阻随环境温度 T 升高 电阻值 会下降 反之 当温度 T 下降 电阻值 会上升 NTC热敏电阻的计算公式有Steinhart Hart方程和B值法两种方法 我只熟悉了B值法 常规NTC热敏电阻参数 温度为 R25 时
  • 一文带你读懂Git中的rebase与fast-forward

    在项目开发的过程中 git作为版本管理工具重要性不言而喻 平常大家肯定会使用merge命令来合并分支 然而merge来合并分支有个缺点 就是当分支太多 合并太多 那么提交记录的图谱看起来就非常丑 以上 而rebase就可以解决这个问题 下文
  • 微电网优化调度

    欢迎来到本博客 作者研究 主要研究方向是电力系统和智能算法 机器学习和深度学习 目前熟悉python网页爬虫 机器学习 群智能算法 深度学习的相关内容 希望将计算机和电网有效结合 本文目录如下 目录 0 摘要 1 引言 2 数学模型 3 算
  • C语言_函数指针

    回顾指针概念 int a b 0 int ip a int sp ip int ar 10 ip ar int par 10 ar int pbr 10 int sbr 10 pbr 需要定义一个指向一维整型数组的指针 才能指向pbr数组
  • 快速傅里叶变换FFT总结

    快速傅里叶变换 在竞赛中离散傅里叶变换DFT及其逆变换IDFT尤为常用 主要用于快速求多项式的乘积 形式化地说 多项式就是某个 f x i
  • linux下signal()软中断信号

    一 signal 信号的功能 软中断信号 signal 又简称为信号 用来通知进程发生了异步事件 在软件层次上是对中断机制的一种模拟 在原理上 一个进程收到一个信号与处理器收到一个中断请求是一样的 二 使用 添加头文件 include