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

为何SIGALRM信号处理示例在Linux与macOS下输出不同?

Unix系统SIGALRM信号处理跨平台差异问题

正在研究Unix系统的信号处理,重点关注SIGALRM信号,编写了如下C语言测试代码:

#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

void sig_handler(int sig) {
    static int beeps = 0;
    printf("BEEP\n");
    if (beeps < 4) {
        beeps += 1;
        fork();
        alarm(1);
    } else {
        printf("BOOM!\n");
        exit(0);
    }
}
int main() {
    signal(SIGALRM, sig_handler);
    alarm(1);
    while (1);
    exit(0);
}

该代码在**Linux 6.2.2(gcc 12.2.1,无优化)**下的输出如下:

BEEP
BEEP
BEEP
BEEP
BEEP
BEEP
BEEP
BEEP
BEEP
BEEP
BEEP
BEEP
BEEP
BEEP
BEEP
BEEP
BEEP
BOOM!
BEEP
BOOM!
BOOM!
BEEP
BOOM!
BEEP
BOOM!
BEEP
BOOM!
BEEP
BOOM!
BEEP
BOOM!
BEEP
BOOM!
BEEP
BOOM!
BEEP
BOOM!
BEEP
BOOM!
BEEP
BOOM!
BEEP
BOOM!
BEEP
BOOM!

但在**Intel架构的macOS Ventura(Apple Clang 14.0.0,无优化)**下输出差异极大:

BEEP
BEEP
BEEP
BEEP
BEEP
BOOM!

已排查fork实现与反汇编结果,未发现异常优化操作。推测该差异与系统信号处理机制相关,但缺乏线索,恳请提供可参考的技术文档、手册或博客。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 19:23:14