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

C语言调用pause()等待信号无额外打印且可正常唤醒的解决方法

问题解答
  • 你的问题本质源于pause()函数的触发返回规则:pause()仅在捕获到信号、且对应信号处理函数执行完成并正常返回后,才会返回-1终止休眠状态。你不需要在信号处理函数中调用特殊功能函数,只需要保证mySignalHandler可以正常执行返回即可解决问题,最小可运行示例如下:
#include <signal.h>
#include <unistd.h>
#include <stdio.h>

void mySignalHandler(int sig) {
    // 无额外逻辑,直接正常返回即可
    return;
}

int main() {
    // 注册自定义信号处理函数覆盖默认动作
    signal(SIGUSR1, mySignalHandler);
    printf("等待SIGUSR1信号触发...\n");
    pause();
    printf("已收到信号,pause()唤醒成功\n");
    return 0;
}

额外说明:默认SIGUSR1的处理动作是终止进程同时输出「User defined signal 1」日志,你注册自定义处理函数覆盖默认动作后,就不会再产生该类无关打印。

  • 如果按上述配置修改后pause()仍然无法唤醒,排查两个常见错误场景:
    • 你的信号处理函数内部调用了_exit()、abort()、exit()这类直接终止进程的函数,导致函数没有执行到正常返回的逻辑
    • 你设置了SIGUSR1的信号屏蔽位,导致发送的信号没有被进程捕获触发处理函数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 08:57:01