Ir para conteúdo
Fórum Script Brasil
  • 0

Programa Para Gerar Processos


Lucksky

Pergunta

Pessoal preciso criar um programa que gere 50 processos filhos,e cada processo filho deverá exibir sia odentificação.Eu fiz um que identifica o pai e o filho mas gostaria de saber como fazer para gerar 50 filhos.

segue meu exemplo:

#include <unistd.h>
          #include <stdio.h>
            int main(){
            int pid;
            printf ("Gera processo\n:");
            pid=fork();
            printf ("processo gerado\n");
            switch (pid){
            case 0 
            printf ("Sou o filho:%d\n",getpid());
            break;
            case -1 
            printf ("não foi possivel criar processo\n");
            break;
            default ("sou o pai.Meu filho tem id=%d\n",pid);
            }
}

Editado por Lucksky
Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Pelo que sei o fork() (lembro de uma especificacao do fork em uma shell, acredito que deva funcionar de forma semelhante) copia o processo atual e continua executando ele a partir de onde o anterior chamou o fork. então se voce colocar uma contadora global estatica com restricao de acesso (a generalizacao do algoritmo de Peterson para sincronismo de recursos da conta do recado) a apenas um processo, voce pode controlar o numero de filhos.

static int nfilhos;

int main(){
    nfilhos = 0;
    comeco:
    PetersonCriticalSectionEnter();/*esta funcao não existe. Voce teria que implementa-la*/
    if (nfilhos < 50){
         nfilhos++;
         fork();
         PetersonCriticalSectionLeave();/*o mesmo aqui*/
         goto comeco;/*sei que goto é meio ruim, mas não consegui pensar em uma solucao melhor. While ia ser ruim pois o numero de filhos esta mudando de forma que o laco so quebraria depois de muito tempo*/
    }
    PetersonCriticalSectionLeave();
    return 0;
}

Apenas tome cuidado para não lançar processos demais (eu conheco a tentacao de criar mil processos de uma vez) pois o escalonador não vai conseguir aguentar e seu micro inteiro vai entrar em uma deadlock porque os processos não ficam tempo suficiente no processador para fazerem algo.

Link para o comentário
Compartilhar em outros sites

  • 0

Acho que consegui pensar num jeito bem melhor:

pidpai = getpid();
for (i = 0; i < 50; i++){
     fork();
     if (getpid() != pidpai) break;
}

assim voce garante a criacao dos 50 processos. Como pidpai é usada somente para leitura, não tem problema de sincronismo.

Link para o comentário
Compartilhar em outros sites

  • 0

Fiz esse código mas não é isso que eu quero ,neste código o PAI está gerando um filho e o filho gerado está gerando outro filho,deste modo:

PAI

\:- filho

::::::\::::-filho

O que eu quero é que somente o PAI gere 35 filhos e não o filho gere filho.Será que alguém tem alguma sugestão,acho que tá faltando só um detalhe que não to conseguindo achar.

# include <stdio.h>
#include <unist.h>
int main(){
int pid;
int i;
int pidpai;
printf("gera o processo pai:%d\n",getpid);
pid=fork();
       switch(pid)
          case 0:printf("sou o  filho%d\n"),getpid());break;
          case 1:printf("não foi possivel\n");break;
          defaut:printf("sou  filho de numero%d\n",getpid());
          pidpai=getpid());
               for(i=0;i<=35;i++){
                   if(getpid()==pidpai)
                       exit (1);
                   }
       
}
}

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...