Escolar Documentos
Profissional Documentos
Cultura Documentos
Resposta: A função fork() é a responsável por criar um novo processo neste código.
Descreva como essa função funciona e o que ela retorna como parâmetro.
A função fork() cria um processo filho exatamente igual ao processo que o chamou. O
processo chamado é referido como filho e o processo que o chama é referido como pai.
Ao obter sucesso em criar o processo filho, o fork() retorna o PID (Process Identifier) do
filho no pai, enquanto o PID = 0 é retornado ao filho. Porém, se houver falha, o valor -1 é retornado
ao pai e nenhum processo filho é criado.
Atente para o aparecimento de duas novas funções: getpid e getppid. O que elas fazem?
A função getppid() retorna o PID do processo pai do que foi chamado; que será ID do
processo que criou o filho, ou caso o pai tenha terminado, será o ID do processo ao qual o filho foi
reparentado.
Todos os erros reportados são de declaração implícita de funções que não estão visíveis no
código. É necessário importar as bibliotecas que contêm essas funções.
Na maioria das vezes, a sequência pai – filho acontece, mas não é em 100% dos casos,
porque não há determinismo em qual dos processos irá executar primeiro. Em processadores multi-
core, os processos pai e filho podem até executar em paralelo.
Agora, comente a primeira main e descomente a segunda. Nesse novo código, novos
processos são criados em três etapas semelhantes à da main anterior. Sem executar o código,
quantos processos você acha que serão criados? Compile e execute o código e veja o resultado ;)
Justifique o número encontrado.
Se você executar o código example várias vezes poderá ter a chance de ver um ou mais
processos filhos referenciarem ao processo init, de pid 1, como pai. No entanto, ao traçar o
mapa de criações de processos, nota-se que de início os processos filhos tinham outros processos
como pai. Por que isso acontece?
Isso acontece porque alguns processos filhos podem ter sido reparentados na árvore de
processos quando o processo pai original terminou.
Para mudar a imagem do processo filho, é necessário usar a função exec(), há diversas
funções advindas dessa, como execl(), execv(), execvpe(), entre outros.
Se um processo filho é executado em background, então seu processo pai não precisa
esperar pelo término do mesmo para disponibilizar o prompt ao usuário novamente. Caso
contrário, o prompt fica bloqueado até que o processo filho seja finalizado. Aliás, qual função
realiza uma chamada ao sistema que faz com que um processo pai espere pelo término de um de
seus processos filhos?
A função wait() faz o processo pai esperar que o processo filho termine para então
continuar sua execução