1 2 pid_t pid; 3 int counter = 0; 4 5 void handler1(int sig) 6 { 7 counter++; 8 printf("counter = %d\n", counter); 9 fflush(stdout); 10 kill(pid, SIGUSR1); 11 } 12 13 void handler2(int sig) 14 { 15 counter += 3; 16 printf("counter = %d\n", counter); 17 exit(0); 18 } 19 20 int main() 21 { 22 sigset_t s; 23 24 Signal(SIGUSR1, handler1); 25 26 sigemptyset(&s); 27 sigaddset(&s, SIGUSR1); 28 sigprocmask(SIG_BLOCK, &s, 0); 29 30 if ((pid = fork()) == 0) { 31 sigprocmask(SIG_UNBLOCK, &s, 0); 32 Signal(SIGUSR1, handler2); 33 kill(getppid(), SIGUSR1); 34 while(1) { 35 } 36 } else { 37 pid_t p; 38 int status; 39 sigprocmask(SIG_UNBLOCK, &s, 0); 40 if ((p = wait(&status)) > 0) { 41 counter += 2; 42 printf("counter = %d\n", counter); 43 44 } 45 } 46 47 return 0; 48 }