Enviado em 08/12/2023 - 20:58h
Pessoal, boa noite!
Estou estudando algumas coisas internas do Kernel Linux, porém estou testando algumas coisas no User-Space para fins didáticos e práticos mesmo.
Executando o código:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(void)
{
pid_t pid =fork();
if(pid == 0)
{
printf("Processo filho\n");
exit(0);
}
else if(pid < 0)
{
perror("Houve um erro na criacao do processo\n");
exit(1);
}
else
{
printf("Processo pai\n");
exit(0);
}
return 0;
}
Fiquei sem entender o motivo de primeiro ser executado o ELSE e não o IF, já que fork foi executado(E teve sucesso, ele iria retornar 0).
A ideia que eu tive analisando foi a seguinte: Quando o processo é duplicado, todo conteúdo da página de memória do pai é copiada para o processo duplicado(filho), eis o COW, "logo o código executável tbm" e nisso ocorre uma espécie de loop, a primeiro vez(Quando executamos o programa "processo pai") e como ocorre a duplicação, o processo filho executa o código novamente, pois o conteúdo da página do pai foi copiado para o filho. E aí que rola a queda no IF, pois o fork já atribuiu 0 a pid(Já que foi executado). Bom, essa a ideia de possibilidade que cheguei! Se não for, desde já agradeço a todos que poderem me ajudar a entender esse comportamento.
Estou estudando algumas coisas internas do Kernel Linux, porém estou testando algumas coisas no User-Space para fins didáticos e práticos mesmo.
Executando o código:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(void)
{
pid_t pid =fork();
if(pid == 0)
{
printf("Processo filho\n");
exit(0);
}
else if(pid < 0)
{
perror("Houve um erro na criacao do processo\n");
exit(1);
}
else
{
printf("Processo pai\n");
exit(0);
}
return 0;
}
Fiquei sem entender o motivo de primeiro ser executado o ELSE e não o IF, já que fork foi executado(E teve sucesso, ele iria retornar 0).
A ideia que eu tive analisando foi a seguinte: Quando o processo é duplicado, todo conteúdo da página de memória do pai é copiada para o processo duplicado(filho), eis o COW, "logo o código executável tbm" e nisso ocorre uma espécie de loop, a primeiro vez(Quando executamos o programa "processo pai") e como ocorre a duplicação, o processo filho executa o código novamente, pois o conteúdo da página do pai foi copiado para o filho. E aí que rola a queda no IF, pois o fork já atribuiu 0 a pid(Já que foi executado). Bom, essa a ideia de possibilidade que cheguei! Se não for, desde já agradeço a todos que poderem me ajudar a entender esse comportamento.