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/