You're forgetting to set the alarm handler initially. Change the start of main()
like:
int main(int argc, char *argv[])
{
signal(SIGALRM, ALARMhandler);
...
Also, the signal handler will probably print nothing. That's because the C library caches output until it sees an end of line. So:
void ALARMhandler(int sig)
{
signal(SIGALRM, SIG_IGN); /* ignore this signal */
printf("Hello
");
signal(SIGALRM, ALARMhandler); /* reinstall the handler */
}
For a real-world program, printing from a signal handler is not very safe. A signal handler should do as little as it can, preferably only setting a flag here or there. And the flag should be declared volatile
.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…