62 lines
		
	
	
		
			899 B
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			899 B
		
	
	
	
		
			C
		
	
	
	
#include <unistd.h>
 | 
						|
#include <stdio.h>
 | 
						|
#include <signal.h>
 | 
						|
 | 
						|
static int sigchld_no;
 | 
						|
static int nosig_no;
 | 
						|
static int weird_value;
 | 
						|
 | 
						|
void
 | 
						|
sigchld_handler (int signo)
 | 
						|
{
 | 
						|
  sigchld_no++;
 | 
						|
  printf ("Got sigchld %d.\n", sigchld_no);
 | 
						|
}
 | 
						|
 | 
						|
int
 | 
						|
call_me (int some_value)
 | 
						|
{
 | 
						|
  int ret_val = 0;
 | 
						|
  int i;
 | 
						|
  for (i = 0; i < some_value; i++)
 | 
						|
    {
 | 
						|
      int result = 0;
 | 
						|
      if (i%2 == 0)
 | 
						|
          result = kill (getpid(), SIGCHLD);
 | 
						|
      else
 | 
						|
        sigchld_no++;
 | 
						|
 | 
						|
      usleep(1000);
 | 
						|
      if (result == 0)
 | 
						|
        ret_val++;
 | 
						|
    }
 | 
						|
  usleep (10000);
 | 
						|
  return ret_val;
 | 
						|
}
 | 
						|
 | 
						|
int
 | 
						|
call_me_nosig (int some_value)
 | 
						|
{
 | 
						|
  int ret_val = 0;
 | 
						|
  int i;
 | 
						|
  for (i = 0; i < some_value; i++)
 | 
						|
    weird_value += i % 4;
 | 
						|
 | 
						|
  nosig_no += some_value;
 | 
						|
  return some_value;
 | 
						|
}
 | 
						|
 | 
						|
int 
 | 
						|
main ()
 | 
						|
{
 | 
						|
  int ret_val;
 | 
						|
  signal (SIGCHLD, sigchld_handler);
 | 
						|
  
 | 
						|
  ret_val = call_me (2);  // Stop here in main.
 | 
						|
 | 
						|
  ret_val = call_me_nosig (10);
 | 
						|
 | 
						|
  return 0;
 | 
						|
 | 
						|
}
 |