Hi everyone,
I've got a problem: child processes are sent a SIGCHLD
but none of them fork!
[I am not asking anyone to debug my code, I just
want to know what's happening]

See the source:

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

void sigchld_handler(){
        sigset_t mask, bak;
  int pid;
  
  sigemptyset( &mask );
  sigaddset( &mask, SIGCHLD );
  sigprocmask( SIG_BLOCK, &mask, &bak );        

  printf("\nhandler...: I am %d,",getpid()); 
  while((pid=waitpid( -1, 0, 0 ))>0)
          printf("I catch %d \n", pid);

        printf("\n"); 
}

int main(){
        sigset_t mask, bak;
        struct sigaction a;
        int pid;
        int i;
        
        printf("father : %d\n", getpid());
        
        /* set up handler */            
  a.sa_handler = sigchld_handler;
  a.sa_flags = 0;
  sigemptyset( &a.sa_mask );
  sigaction( SIGCHLD, &a, NULL );
    
        /* block sigchld */
  sigemptyset( &mask );
  sigaddset( &mask, SIGCHLD );
  sigprocmask( SIG_BLOCK, &mask, &bak );        
        
        /* spawn 5 children */
        for(i = 0; i < 5; i++)
        {
        if((pid=fork())==0)
                exit(0);
        else
                printf("%d spawned : %d\n",getpid(), pid);
        
        sleep(1);
        }
                
  sleep(1);
  /* restore sigchld */
/*  sigprocmask( SIG_SETMASK, &bak, &mask );                    */
        return 0;
}

output on cygwin:
-----------------

father : 3028
3028 spawned : 2948
3028 spawned : 4056

handler...: I am 4056,
3028 spawned : 2272

handler...: I am 2272,
3028 spawned : 880

handler...: I am 880,
3028 spawned : 3976

handler...: I am 3976,


How come? I don't get this error on AIX.

Is it a bug?

Thanks.
Reivilos

__________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around 
http://mail.yahoo.com 

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/

Reply via email to