我正在尝试对警报进行一些简单的操作,但是在发出警报后,printf始终无法执行,为什么?
#include <stdio.h>
#include <signal.h>
int main() {
alarm(3);
printf("Hello...\n");
alarm(6);
while(1);
printf("Hello2\n");
}
我希望打印hello和hello2,目前仅打印hello
答案 0 :(得分:6)
您没有为SIGALRM
指定处理程序,它的默认行为(根据man 7 signal
)是终止程序。即使您确实指定了处理程序,运行该程序后,您仍将处于while(1)
循环中。
这是修改程序以解决这两个问题的方式:
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
volatile sig_atomic_t got_sigalrm = 0;
void handle_sigalrm(int signum) {
got_sigalrm = 1;
}
int main() {
struct sigaction act = { .sa_handler = handle_sigalrm };
sigaction(SIGALRM, &act, NULL);
alarm(3);
printf("Hello...\n");
alarm(6);
while(!got_sigalrm);
printf("Hello2\n");
}