为什么 Ctrl+C 在我的终端上不起作用?

Why doensn't Ctrl+C doesn't work in my terminal?

我遇到了以下问题:

我正在主线程中创建两个线程。这些线程永远不会停止(它们一直在侦听消息)。

所以,在创建这两个线程之后,我有这个片段代码来保留程序 运行:

for (;;)
{
    sleep(10);
}
return 0;

可以,但问题是当我执行程序时,在终端中,Ctrl+C 不允许我退出程序。我必须使用 Ctrl+\ 退出。我有这个功能(不是我做的)。问题出在哪里?

void app_signal_handler(int sig_num)
{
    if (sig_num == SIGINT) {
        printf("SIGINT signal!\n");
    }
    if (sig_num == SIGTERM) {
        printf("SIGTERM signal!\n");
    }
    app_running = false;
}

char app_sigaltstack[SIGSTKSZ];
int app_setup_signals(void)
{
    stack_t sigstack;
    struct sigaction sa;
    int ret = -1;

    sigstack.ss_sp = app_sigaltstack;
    sigstack.ss_size = SIGSTKSZ;
    sigstack.ss_flags = 0;
    if (sigaltstack(&sigstack, NULL) == -1) {
        perror("signalstack()");
        goto END;
    }

    sa.sa_handler = app_signal_handler;
    sa.sa_flags = SA_ONSTACK;
    if (sigaction(SIGINT, &sa, 0) != 0) {
        perror("sigaction()");
        goto END;
    }
    if (sigaction(SIGTERM, &sa, 0) != 0) {
        perror("sigaction()");
        goto END;
    }

    ret = 0;
END:
    return ret;
}

您从不使用 app_running。替换

for (;;)
{
    sleep(10);
}

while (app_running)
{
    sleep(10);
}