Вы не указали обработчик для 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");
}