1 #include <unistd.h> 2 #include <stdio.h> 3 #include <signal.h> 4 5 static int sigchld_no; 6 static int nosig_no; 7 static int weird_value; 8 9 void sigchld_handler(int signo)10sigchld_handler (int signo) 11 { 12 sigchld_no++; 13 printf ("Got sigchld %d.\n", sigchld_no); 14 } 15 16 int call_me(int some_value)17call_me (int some_value) 18 { 19 int ret_val = 0; 20 int i; 21 for (i = 0; i < some_value; i++) 22 { 23 int result = 0; 24 if (i%2 == 0) 25 result = kill (getpid(), SIGCHLD); 26 else 27 sigchld_no++; 28 29 usleep(1000); 30 if (result == 0) 31 ret_val++; 32 } 33 usleep (10000); 34 return ret_val; 35 } 36 37 int call_me_nosig(int some_value)38call_me_nosig (int some_value) 39 { 40 int ret_val = 0; 41 int i; 42 for (i = 0; i < some_value; i++) 43 weird_value += i % 4; 44 45 nosig_no += some_value; 46 return some_value; 47 } 48 49 int main()50main () 51 { 52 int ret_val; 53 signal (SIGCHLD, sigchld_handler); 54 55 ret_val = call_me (2); // Stop here in main. 56 57 ret_val = call_me_nosig (10); 58 59 return 0; 60 61 } 62