
		ugoraga
		
		(usa Outra)
		
		Enviado em 14/02/2009 - 10:37h 
		cara achei 
http://www.dca.fee.unicamp.br/~lotufo/cursos/EA877/sistemas-operacionais/exemplos/tempo.c
/*
Programa tempo.c - exemplo de utilização da chamada fork(); é uma versão
modificada do exemplo da seção 1.5.2 (pags. 9-10) da apostila de
sistemas operacionais (Magalhães, Cardozo, Faina).
Historico: criado por Magalhaes, Cardozo
Modificado: Mauro Aurelio
            Roberto Lotufo 6nov96
Compilacao: gcc tempo.c -o tempo
Execucao: tempo <comando>
          onde <comando> pode ser ls por exemplo
Sugestao de Modificacoes:
1. Retire a chamada wait(NULL) e observe o comportamento
2. Faca com que cada processo imprima o seu pid
   o pid 'e obtido chamando-se getpid()
*/
#include <stdio.h>
#include <sys/wait.h>
#include <sys/time.h>
#include <sys/types.h>
main(int argc, char *argv[])
{
  int pid;
  struct timeval tv1, tv2;
  double t1, t2;
  if(argc != 2)
  {
    printf("Uso: tempo algum_comando\n");
   
  }
  pid = fork();                                /* fork */
  if(pid == 0) {
    printf("\nProcesso filho vai executar %s agora.\n",argv[1]);
    gettimeofday(&tv1, NULL);   /* processo pai continua ... */
    t1 = (double)(tv1.tv_sec) + (double)(tv1.tv_usec)/ 1000000.00;
    system(argv[1]);             /* processo filho executa comando */
    gettimeofday(&tv2, NULL);
    t2 = (double)(tv2.tv_sec) + (double)(tv2.tv_usec)/ 1000000.00;
    printf("\nExecucao de %s terminou agora.\n",argv[1]);
    printf("\nO tempo de execucao de %s por filho foi: %lf\n", 
	   argv[1], (t2 - t1));
  }
  else{  
    gettimeofday(&tv1, NULL);   /* processo pai continua ... */
    t1 = (double)(tv1.tv_sec) + (double)(tv1.tv_usec)/ 1000000.00;
    /*    wait(NULL); */            /* sincroniza com o termino do filho */
    gettimeofday(&tv2, NULL);
    t2 = (double)(tv2.tv_sec) + (double)(tv2.tv_usec)/ 1000000.00;
    printf("\nO tempo de execucao de processo pai foi: %lf\n",(t2 - t1));
  }
}