You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言编写的SIGUSR1信号触发代码运行后无对应输出如何解决

错误原因
  • 核心问题:main函数在完成SIGUSR1信号处理函数的注册后直接执行return 0退出了进程,进程没有停留等待信号发送,自然无法触发对应的处理逻辑。
  • 额外规范问题:信号处理函数内调用printf属于不安全操作,printf是不可重入的标准IO函数,不属于异步信号安全函数,在信号处理上下文调用可能出现意料之外的异常。
修复方法

让进程在注册信号后保持运行状态等待信号接收即可,比如通过pause()函数挂起进程,参考修复代码如下:

#include <signal.h>
#include <stdio.h>
#include <unistd.h> // 引入pause、getpid所需的头文件

void my_handler(int signum)
{
    // 此处仅做演示,实际场景避免在信号处理函数中调用标准IO函数
    printf("Hello\n");
    printf("%d\n", signum);
    if (signum == SIGUSR1) {
        printf("Received\n");
    }
}

int main() {
    printf("Starting... 当前进程PID为:%d\n", getpid());
    signal(SIGUSR1, my_handler);
    pause(); // 挂起进程,直到接收到信号才会继续执行
    return 0;
}

修复后运行程序,另开终端执行命令kill -SIGUSR1 你程序的PID,就能看到信号处理函数的输出内容。

内容的提问来源于stack exchange,提问作者Kinnturo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 06:39:01