Pular para o conteúdo

fork() - Processos [RESOLVIDO]

Responder tópico
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.
  • Denunciar
  • Indicar

1. fork() - Processos [RESOLVIDO]

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

Responder tópico

O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

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

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]

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.

5. Acho que ta resolvido.

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]

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

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

Abraços

Responder tópico

O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Responder tópico

Entre na sua conta para responder.

Fazer login para responder