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

非异步信号安全函数

这个程序演示了如何使用sigaction来捕获和处理信号(特别是SIGINT,即Ctrl+C)。以下是关键点和潜在问题的分析:

程序功能

  1. 信号捕获:注册自定义处理函数handler来捕获信号2(SIGINT,通常由Ctrl+C触发)
  2. 循环输出:主函数无限循环每秒打印进程PID,捕获信号后继续运行,而非终止。

代码解析

  • 信号处理设置

    struct sigaction act;
    act.sa_handler = handler; // 设置信号处理函数
    sigaction(2, &act, &olact); // 注册SIGINT的处理方式
    

    使用sigaction替换默认信号处理,旧的处理方式保存在olact中。

  • 处理函数

    void handler(int signum) {cout << "I catch a signal:" << signum << endl;
    }
    

    当SIGINT触发时,输出信号编号。

潜在问题

  1. 非异步信号安全函数

    • cout在信号处理函数中使用可能不安全。信号处理应仅使用异步信号安全函数(如write),避免竞争条件。
  2. 未初始化sigaction结构体

    • act.sa_maskact.sa_flags未显式设置。正确做法是清空sa_mask并设置sa_flags
      sigemptyset(&act.sa_mask);
      act.sa_flags = 0; // 或 SA_RESTART 以自动重启被中断的系统调用
      
  3. 程序终止

    • 捕获SIGINT后,Ctrl+C无法终止程序。需通过其他信号(如kill -9 PID)终止。

改进建议

  • 使用安全函数
    void handler(int signum) {const char* msg = "I catch a signal:2\n";write(STDOUT_FILENO, msg, strlen(msg));
    }
    
  • 正确初始化sigaction
    struct sigaction act = {};
    act.sa_handler = handler;
    sigemptyset(&act.sa_mask);
    act.sa_flags = 0;
    

运行示例

  1. 编译并运行程序后,按下Ctrl+C会触发handler,输出信号信息。
  2. 程序继续运行,需用kill命令终止。

该程序展示了信号处理的基本用法,但需注意安全性和结构体初始化以确保稳定。

http://www.xdnf.cn/news/444709.html

相关文章:

  • The 2022 ICPC Asia Xian Regional Contest(E,L)题解
  • 5 WPF中的application对象介绍
  • DHCP协议
  • 每日算法-250514
  • Untiy基础学习(十四)核心系统—物理系统之碰撞检测代码篇 刚体,碰撞体,材质
  • 网络运维过程中的常用命令
  • idea中编写spark程序
  • 通过迁移学习改进深度学习模型
  • Python Day25 学习
  • MCU裸机程序如何移植到RTOS?
  • MySQL 入门大全:数据类型
  • 【漫话机器学习系列】258.拐点(Inflection Point)
  • C++中如何实现一个单例模式?
  • Spring Cloud:构建云原生微服务架构的最佳工具和实践
  • 机密虚拟机的威胁模型
  • 仓配一体化系统如何选择,ERP、OMS、WMS 功能解析与搭配策略
  • 生成对抗网络(Generative Adversarial Networks ,GAN)
  • 仿生眼机器人(人脸跟踪版)系列之一
  • 2025tg最新免费社工库机器人
  • Kotlin Multiplatform与Flutter、Compose共存:构建高效跨平台应用的完整指南
  • 【kafka】kafka概念,使用技巧go示例
  • Daily AI 20250514 (迁移学习与元学习)
  • 【交互 / 差分约束】
  • 【ROS2】 核心概念5——服务(service)
  • 【!!!!终极 Java 中间件实战课:从 0 到 1 构建亿级流量电商系统全链路解决方案!!!!保姆级教程---超细】
  • 通过泛域名解析把二级域名批量绑定到wordpress的指定页面
  • Ubuntu磁盘空间分析:du命令及常用组合
  • AI 产业化浪潮:从生成智能到星载计算,中国如何重塑全球竞争格局
  • Hadoop的组成
  • 分布式系统中的Paxos协议