fork() - Processos [RESOLVIDO]

1. fork() - Processos [RESOLVIDO]

Enzo de Brito Ferber
EnzoFerber

(usa FreeBSD)

Enviado em 20/01/2009 - 19:10h

E ai galera,

Então, estou querendo saber se existe algum jeito de tornar o processo filho ( processo criado por fork() ) independente do processo pai. Por exemplo, colocar cada processo em uma thread e sair do processo pai sem que isso termine o processo filho?

Bom, não sei se conseguir ser claro suficiente, mas espero que sim. :D

Agradeco desde já,
[]'s
Slackware_10


  


2. Re: fork() - Processos [RESOLVIDO]

Fagner Amaral de Souza Candido
f_Candido

(usa Ubuntu)

Enviado em 21/01/2009 - 02:32h

Uma boa pergunta. Pois quando você dá um fork, o filho vai compartilhar dados com o processo pai. Mas coloca-los em threads diferentes... Nunca tinha parado para pensar nisto. Mas sabe-se que se o pai morre, não necessariamente o filho morre. Logo, pode ser que possa ser feito o que tu diz... Mas como fazer isso, aí eu já não sei.

Abraços


3. Re: fork() - Processos [RESOLVIDO]

Elgio Schlemer
elgio

(usa OpenSuSE)

Enviado em 23/01/2009 - 18:34h

Interessante mesmo! Estou comentando para marcar o tópico, pois também me interesso pela resposta (a qual também vou começar a pesquisar).

Um caminho: na linha de comando tem o nohup que inicia um processo e ele não morre quando o shell termina. Logo, é possível. O fork não tem qualquer parâmetro, mas a chamada clone é CHEIA DE PARÂMETROS (nunca usei).

Vou dar uma lida em mans para e testar algumas coisas para ver se descubro algo.


4. Re: fork() - Processos [RESOLVIDO]

Fagner Amaral de Souza Candido
f_Candido

(usa Ubuntu)

Enviado em 24/01/2009 - 14:16h

Bom procurando um pouco, encontrei estes links:
http://lists.debian.org/debian-user-portuguese/2007/08/msg00313.html
http://www.nabble.com/Desassocia%C3%A7%C3%A3o-de-processos-filho-td12078538.html
Bom, acredito que seja o mesmo autor da pergunta para ambos o links, mas as respostas são semelhantes.

Abraços


5. Acho que ta resolvido.

Enzo de Brito Ferber
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...


6. Re: fork() - Processos [RESOLVIDO]

Fagner Amaral de Souza Candido
f_Candido

(usa Ubuntu)

Enviado em 31/01/2009 - 15:20h

Só mais um detalhe: Coloca o post como resolvido.

Abraços






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts