繁体   English   中英

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

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

我有以下问题:

我在 main 中创建了两个线程。 这些线程永远不会停止(它们总是在监听消息)。

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

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);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM