1 #include <signal.h>
2 #include <unistd.h>
3 #include <stdlib.h>
4 
5 void foo (void);
6 void bar (void);
7 
8 void subroutine (int);
9 void handler (int);
10 void have_a_very_merry_interrupt (void);
11 
main()12 main ()
13 {
14   puts ("Starting up");
15 
16   foo ();   /* Put a breakpoint on foo() and call it to see a dummy frame */
17 
18 
19   have_a_very_merry_interrupt ();
20 
21   puts ("Shutting down");
22 }
23 
24 void
foo(void)25 foo (void)
26 {
27   puts ("hi in foo");
28 }
29 
30 void
bar(void)31 bar (void)
32 {
33   char *nuller = 0;
34 
35   puts ("hi in bar");
36 
37   *nuller = 'a';      /* try to cause a segfault */
38 }
39 
40 void
handler(int sig)41 handler (int sig)
42 {
43   subroutine (sig);
44 }
45 
46 /* The first statement in subroutine () is a place for a breakpoint.
47    Without it, the breakpoint is put on the while comparison and will
48    be hit at each iteration. */
49 
50 void
subroutine(int in)51 subroutine (int in)
52 {
53   int count = in;
54   while (count < 100)
55     count++;
56 }
57 
58 void
have_a_very_merry_interrupt(void)59 have_a_very_merry_interrupt (void)
60 {
61   puts ("Waiting to get a signal");
62   signal (SIGALRM, handler);
63   alarm (1);
64   sleep (2);  /* We'll receive that signal while sleeping */
65 }
66 
67