Qual chamada no Linux cria um processo filho idêntico ao pr...

Próximas questões
Com base no mesmo assunto
Q824407 Sistemas Operacionais
Qual chamada no Linux cria um processo filho idêntico ao processo pai?
Alternativas

Gabarito comentado

Confira o gabarito comentado por um dos nossos professores

Alternativa correta: B - fork

Vamos abordar o assunto dessa questão, que envolve um conceito muito importante em sistemas operacionais, especialmente no contexto do Linux: a criação de processos. No Linux, processos são criados através do mecanismo de forking, ou seja, bifurcação. Quando invocada, a chamada de sistema fork() cria um novo processo, que é quase uma cópia exata do processo pai. Este novo processo é chamado de processo filho.

A função fork() é uma das chamadas de sistema fundamentais para a manipulação de processos no ambiente Unix/Linux. O processo filho gerado pelo fork() recebe um novo PID (identificador de processo) mas compartilha com o processo pai o mesmo código e muitos dos mesmos estados. Após a chamada fork(), é comum que o processo filho realize outras operações, como substituir seu programa em execução através do exec, ou que o processo pai e filho sigam caminhos de execução diferenciados.

Para esclarecer as demais alternativas, waitpid é uma chamada de sistema que permite ao processo pai esperar que um processo filho mude de estado ou termine sua execução. Duplicate não é uma chamada de sistema em Linux que lida com a criação de processos. E createSon não é uma função conhecida ou padrão no contexto dos sistemas operacionais Unix-like, como o Linux.

Portanto, a alternativa B - fork é a correta pois é a chamada de sistema que efetivamente cria um processo filho que é uma cópia do processo pai no sistema operacional Linux.

Clique para visualizar este gabarito

Visualize o gabarito desta questão clicando no botão abaixo

Comentários

Veja os comentários dos nossos alunos

Letra B) Quando criamos um processo por meio do fork, dizemos que esse novo processo é o filho, e processo pai é aquele que usou o fork.

 

http://www.programacaoprogressiva.net/2014/09/A-Chamada-de-Sistema-fork-Como-Criar-e-Gerenciar-Processos.html

Gabarito B

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!

 

"Retroceder Nunca Render-se Jamais !"
Força e Fé !
Fortuna Audaces Sequitur !

Clique para visualizar este comentário

Visualize os comentários desta questão clicando no botão abaixo