Ir para o conteúdo
angelicous

Comunicação de multiplos forks para utilização global de CPU

Mensagens Recomendadas

angelicous

Boas, eu tenho um processo do qual quero saber a %cpu utilizada por ele, e de todos os seus processos filho.

Quero recorrer ao comando "pidstat -p PID" para saber essa %.

Eu já tenho a lista de PID(uma matriz de char) que quero pesquisar e tenho isto a funcionar para um único PID. O meu problema neste momento, é mesmo como fazer a comunicação entre o pai e multiplos filhos, de forma a ficar tudo a funcionar correctamente.

Esta é a parte do meu código a funcionar para um único PID

if (!fork()){
 /*FILHO*/
 //Fecha saida do pipe
 close(pipepidstat[0]);
 //Coloca o stdout a redirecionar para a entrada do pipe
 dup2(pipepidstat[1],1);
 //Faz o comando pidstat que quero fazer.
 execlp("pidstat","pidstat","-p",pidstring,NULL);
 //filho desaparece aqui. Eu sei que falta o exit para caso de erro no exec.
  }

 /*PAI*/
 //esperamos pelo filho
 wait();
 int z=0; int size2=1;
 //fechamos a entrada do pipe
 close(pipepidstat[1]);
 //Leitura do pipe caracter a caracter com um buffer dinamico
 while(read(pipepidstat[0],&c,1)>0) {
  if(z>=size2){
   buffpid=(char*)realloc(buffpid,size2*2);
   size2*=2; 
  }
  buffpid[z]=c;
  z++;
 }
 buffpid[z]='\0';
   //imprime o que leu do pidstat
 printf("%s",buffpid);

Esta string final, do buffpid, vai ser processada por uma função que tenho, que faz o parse da info que quero. A questão que tenho agora é, como faço para meter isto a executar não 1 vez, mas multiplas?

Tenho obrigatóriamente de criar uma matriz dinamica, para ter um pipe diferente por cada uma, e depois faço um for que envolve tudo isto a correr N vezes? Ou não existe necessidade de fazer um pipe sempre que corro isto? já tentei fazer só com um pipe e com o for, e para a primeira execução até funciona +-, mas depois dá asneira...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.