java.util.Gustavo
-
Posts
2 -
Cadastrado em
-
Última visita
Tipo de conteúdo
Artigos
Selos
Fabricantes
Livros
Cursos
Análises
Fórum
posts postados por java.util.Gustavo
-
-
Olá pessoal, estou fazendo um trabalho no qual eu preciso fazer um gerenciador de processos em c. Nele preciso criar processos e imprimir cada PID na tela, mas estou com dificuldade para administrar os processos. Quando eu escolho a opção de imprimir os processos não acontece nada e não consegui descobrir o que é. Segue o que consegui fazer:
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <sys/wait.h> #include <signal.h> #include <string.h> int **pipefd; void filho(int *pipe) { pid_t buf; close(pipe[1]); while(read(pipe[0],&buf,256) > 0) printf("%d",buf); } int main(){ pid_t *processos; int num, opc,i,b; do{ printf("Digite 1 para criar novos processos:\n"); printf("Digite 2 para imprimir os processos existentes:\n"); printf("Digite 9 para sair:\n"); scanf("%d",&opc); switch(opc){ case 1: printf("Digite o número de processos a serem criados:\n"); scanf("%d",&num); pipefd = (int**)malloc(sizeof(int*)*num); processos = malloc(num*sizeof(int)); for(i = 0;i<num;i++){ pipefd[i] = (int*) malloc(sizeof(int)*2); pipe(pipefd[i]); processos[i] = fork(); if(processos[i] == 0){ filho(pipefd[i]); } } break; case 2: for(i = 0;i<num;i++){ close(pipefd[i][0]); b = processos[i]; write(pipefd[i][1],&b,sizeof(int)); if(processos[i] == 0) filho(pipefd[i]); } break; } }while(opc!=9); return 0; }
Sobre o Clube do Hardware
No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais
Direitos autorais
Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais
Adminstrar processos no linux com fork() e pipe bidimensional
em C/C#/C++
Postado
@CiroboyBR Sim, o problema é que os filhos estão sendo executados aleatoriamente, não estou conseguindo coordenar a execução de cada um. Eles estão fora de sincronia.