为什么 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);
}
我遇到了以下问题:
我正在主线程中创建两个线程。这些线程永远不会停止(它们一直在侦听消息)。
所以,在创建这两个线程之后,我有这个片段代码来保留程序 运行:
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);
}