62 lines · c
1#include <unistd.h>2#include <stdio.h>3#include <signal.h>4 5static int sigchld_no;6static int nosig_no;7static int weird_value;8 9void10sigchld_handler (int signo)11{12 sigchld_no++;13 printf ("Got sigchld %d.\n", sigchld_no);14}15 16int17call_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 else27 sigchld_no++;28 29 usleep(1000);30 if (result == 0)31 ret_val++;32 }33 usleep (10000);34 return ret_val;35}36 37int38call_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 49int 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