Quando processos filhos são executados [duplicados]

0

Eu sempre achei que os processos filhos eram sempre executados depois que o processo pai era concluído, mas depois de executar o programa a seguir obtive resultados como às vezes apenas imprimindo pai ou filho ou alternativo no começo eu pensei que era o agendador que estava alterando os processos, mas no gerenciador de tarefas, mesmo se ambos estiverem no estado S, eles ainda estarão imprimindo assim quando os processos filhos forem executados e quando o pai Obrigada!

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main (){
    int pid=fork();
    while (1){
        if(pid==0){
            puts("child");
        }else{
            puts("parent");
        }
    }
}
    
por Laur155 155 21.05.2018 / 13:44

1 resposta

0

Após um fork() , o pai e o filho começam a correr, teoricamente simultaneamente. É claro que, na prática, eles alternam se você estiver em um sistema de uniprocessador, ou se houver outros processos que desejam ser executados ou se o agendador do sistema diz isso por algum outro motivo.

O comportamento de busyloops simultâneos como você tem em seu exemplo provavelmente é muito sensível a como o agendador reage a coisas fora do programa. Então não é algo que você quer confiar.

Se você adicionar um sleep(1) explícito dentro do loop, verá um comportamento mais consistente. Ou, se você realmente quer dois processos fazendo algo em alternância, o mais rápido que puder, você precisará implementar algum tipo de sincronização.

    
por 21.05.2018 / 13:50

Tags