1. Processo PAI invoca a chamada de sistema fork() para criar um processo FILHO e, em seguida, execl() para carregar o programa "hll-wrld" no espaco de enderecamento do processo filho. Neste ponto o processo PAI le a hora corrente e sincroniza seu termino com o processo FILHO atraves da chamada de sistema wait(). Quando o processo FILHO finaliza, o processo PAI le novamente a hora corrente, imprime o tempo gasto para o processo FILHO ser executado e finaliza sua execucao com a chamada exit().
Compile os programas com o comando: $ "gcc prc-envr.c -o prc-envr". Compile também o programa "hll-wrld.c" de modo que o executável "hll-wrld" seja gerado. Finalmente, invoque o comando: $ "prc-envr hll-wrld"
/* prc-envr.c - ilustra os comandos fork, execl, wait e exit */ /* **************************************** Includes */ #include#include #include /* ************************************************** Main Program */ int main( int argc, char* argv[] ) { int pid; struct timeval tv1, tv2; double t1, t2; if( argc != 2 ) { printf("Digite: prc-envr \"hll-wrld\" \n"); exit(1); } pid = fork(); if( pid == 0 ) execl( argv[1], NULL ); else printf("Processo FILHO: \"%s\".\n", argv[1] ); printf("Processo PAI: \"prc-envr\".\n"); gettimeofday( &tv1, NULL ); /* Processo PAI continua */ t1 = (double)(tv1.tv_sec) + (double)(tv1.tv_usec) / 1000000.00; wait( NULL ); gettimeofday( &tv2, NULL ); /* Processo PAI continua */ t2 = (double)(tv2.tv_sec) + (double)(tv2.tv_usec) / 1000000.00; printf("Processo PAI: sincroniza com termino do Processo FILHO.\n"); wait( NULL ); printf("O Tempo de Execucao de \"%s\" eh: %lf s.\n", argv[1], (t2 - t1)); exit(0); }
/* hll-wrld.c - imprime "Hellow World" */ /* **************************************** Includes */ #include/* ************************************************** Main Program */ int main( int argc, char* argv[] ) { printf("Programa: \"Hello World\". \n"); exit(0); }