#include <unistd.h>
#include <stdio.h>
#include <errno.h>
#include <sys/errno.h>
#include <signal.h>

int main(void)
{
  int pid=getpid();
  int newpid, eagain = 0;
  
  signal(SIGCLD, SIG_IGN);
  do{
    newpid = fork();
    if (newpid < 0 && errno == EAGAIN && !eagain) {
      /* Terminate on second EAGAIN */
      sleep(1);
      eagain = 1;
      newpid = pid+1; /*"continue anyway";*/
    } else {
      eagain = 0;
    }
    if (newpid != 0 && (newpid & 1023) == 0) {
      printf("%d\n", newpid);
    }
  } while (newpid > pid);
  if (newpid < 0) {
    perror("fork");
    return 1;
  }
  return 0;
}

