1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
#include <stdlib.h>
#include <sys/wait.h>
#include <pthread.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <signal.h>
static void *threadmain( void *dummy )
{
sleep( (unsigned long)dummy );
return NULL;
}
int main( int argc, char **argv )
{
int ctr;
pid_t childpid;
pthread_t childthread;
void *res;
int status;
pthread_create( &childthread, NULL, threadmain, (void *)2 );
childpid = fork();
switch( childpid ) {
case 0:
pthread_create( &childthread, NULL, threadmain, 0 );
pthread_join( childthread, &res );
exit(0);
break;
case -1:
perror( "FAILED: fork failed\n" );
break;
default:
break;
}
pthread_join( childthread, &res );
ctr = 0;
while(waitpid(childpid, &status, 0) != childpid) {
sleep(1);
ctr++;
if (ctr >= 10) {
printf("FAILED - timeout waiting for child\n");
return 0;
}
}
printf("PASS\n");
return 0;
}
|