This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

SIGCHLD problem


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/


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]