all -

I am attempting to use sigwait to wait for SIGCHLD from
children of my process

The following does not work (assumint that testchild just
sleeps and then exits)

I never get the signal. 
on solaris 2.7 to make this work, i have to call
signal( SIGCHLD, sigHndlr ). 
The sigHndlr never gets called cause the sigprocmask
blocks it 

What am I doing wrong?
thanks
jack

-- begin testparent.c ----
#include <stdio.h>
#include <unistd.h>
#include <iostream.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/wait.h>
 
int main( int argc, char ** argv )
{

  sigset_t newmask, oldmask;
  int signo;

  sigemptyset( &newmask );

  if( sigaddset( &newmask, SIGCHLD ) )
    perror( "sigaddset" );

  if( sigprocmask( SIG_BLOCK, &newmask, NULL ) )
    perror( "pthread_sigmask() error" );

  char * argp[1];
  argp[0] = NULL;
 
  pid_t pid = fork( );
  if( pid == 0 ) {
     if( execv("./testchild", argp ) ) {
      perror( "execv" );
    }
  }

  cout << "before sigwait" << endl;
  if( sigwait( &newmask, &signo ) )
    perror( "sigwait error" );

  if( signo == SIGCHLD )
    cout << "testparent SIGCHLD" << endl;
 
}


To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-hackers" in the body of the message

Reply via email to