EnzoFerber
(usa FreeBSD)
Enviado em 24/01/2009 - 19:37h
// pthread2.c
/*
* Enzo Ferber : <enzo@veloxmail.com.br>
*
* POSIX Threads Test 2
* @ Exit parent and go on with child.
*
* $ gcc -lpthread -o pthread2 pthread2.c
*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h> // getpid
#include <pthread.h> // POSIX Threads
#include <sys/types.h> // getpid
// child in infinite loop
void *childfunction ( void *ptr )
{
pthread_t self = pthread_self ();
pthread_detach ( self );
for ( ; ; )
{
printf ( "[*] Here I am again ... \n");
sleep (2);
}
}
// main function
int main ( int argc, char *argv[] )
{
pthread_t child;
int cret; // child pthread_create () return
// child
if ( !fork() )
{
printf ( "[*] Child proccess begining ... \n" );
cret = pthread_create ( &child, NULL, childfunction, NULL );
printf ( "[*] Child PID: %d\n", getpid () );
pthread_join ( child, NULL );
}
// parent
else
{
printf ( "[*] Parent PID: %d\n", getpid () );
printf ( "[*] Aborting parent ...\n" );
exit (0);
}
// end main
return 0;
}
// EoF
Usei as funções pthread_self e pthread_detach para que a thread do filho seja desanexada do pai, e o filho continue executando apos o processo pai ser terminado.
Para terminar a execução do processo filho, digite no terminal:
kill <child_pid>
O programa fornce o child_pid quando é executado. Se alguem encontrar bugs ou tiver alguma sugestão, postem ai!
P.S.: aqui funcionou, mas ainda to tentando retirar os bugs...