quinta-feira, 8 de setembro de 2011

Comando fork() - Sistemas Operacionais

Pessoal, resolvi postar algo sobre o uso do comando fork() em ambiente Linux de programação.
Quando damos o comando fork() em um programa escrito em C no Linux, ele vai criar uma cópia exata a partir do ponto em que o comando é executado e dois processos executam ao mesmo tempo, o processo pai (aquele que chama o comando fork() ) e o processo filho (o que foi gerada pela chamada do fork() ).
Um programa simples que usa o fork() pode ser visto logo abaixo:

#include < stdio.h >
#include < stdlib.h >
#include < sys/types.h >
#include < sys/wait.h >
#include < unistd.h >

int main ()
{
pid_t filho;
filho = fork(); //aqui criamos o processo filho
if ( filho == 0 ) { //execução do filho
printf ("Sou o filho executando...\n");
_exit(0);
}
else { //execução do pai
printf ("Sou o pai executando.\n");
}
exit(0);
}

Uma maior explicação dos cabeçalhos incluídos nesse programa pode ser encontrado nas entradas de manual do linux, como "man fork". Você pode encontrar descrições detalhadas de cada função.
Podemos ver que quando damos um comando fork() um valor de retorno é atribuído à variável filho. No processo pai, esse valor é diferente de zero, no processo filho, é igual a zero. Observe que o que estiver abaixo do comando fork() é replicado para outro processo, então tanto o processo pai quanto o filho irão executar o que vier abaixo, por isso precisamos testar com o "if" o que cada um deve executar. Então se o valor da variável filho é igual a zero, então quer dizer que é o trecho de código que o filho deve executar, caso contrário, será o do pai. Dessa forma, temos dois processos executando, sendo que um foi gerado pelo outro! A ideia é fazer com que os dois executem e realizem tarefas de modo mais rápido, sendo que cada tarefa é atribuída para cada um realizar separadamente, com isso pode-se obter ganho de desempenho!
Espero que tenham gostado!