我有以下問題:
我在 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;
}
uj5u.com熱心網友回復:
你從不使用app_running. 代替
for (;;)
{
sleep(10);
}
和
while (app_running)
{
sleep(10);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/348677.html
上一篇:檢查矩陣中相同的相鄰數字
下一篇:free()后出現分段錯誤
