Unidade E - Multiprogramação

Criando processos

Uma programação bem interessante é a criação de processos, que pode ser facilmente desenvolvida na linguagem C em sistemas unix-like.

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>

int main(int argc,char *argv[]){
         pid_t fork1;
         int pid_filho,pid_pai,status,i;

         printf("PAI: Meu pid é: %d não tenho filhos - execute $ps -ef  para ver meu PID\n",(int)getpid());          printf("PAI: - tecle ENTER para continuar\n");
         getchar();
                 
         fork1 = fork();
         if(fork1 == -1){
                           perror("Falha na criação do filho");
                           _exit(-1);}
         else if(fork1 == 0){    //area do filho
                           pid_filho = getpid();
                           pid_pai = getppid();
                           printf("FILHO: Eu sou o filho e meu pid é: %d \n",pid_filho);
                           printf("FILHO: Meu processo pai é: %d \n",pid_pai);
                           printf("FILHO: Minha tarefa é repetir bom dia 5 vezes\n");
                           for(i=1;i<=5;i++){
                                    sleep(1);
                                    printf("FILHO: Bom dia nº %d!\n",i);}
                           printf("FILHO: encerrei minha atividade - tecle ENTER para continuar\n");
                           getchar();
                           _exit(0);}
         else { //area do pai
                           wait(&status);
                           printf("PAI: Meu pid é: %d \n",(int)getpid());              
                           printf("PAI: Criei um filho com PID: %d \n", (int)pid_filho);
                           printf("PAI: Minha tarefa dizer boa noite 2 vezes\n");
                           for(i=1;i<=2;i++){
                                    sleep(1);
                                    printf("PAI: Boa noite nº %d!\n",i);}
                           printf("PAI: Finalizei - tecle ENTER para continuar\n");
                           getchar();
                           _exit(0);}

No código acima, o processo PAI cria um processo FILHO que executa uma ação qualquer e  retorna para o PAI. Neste programa podemos observar a técnica de programação envolvida na criação de processos.

Uma vez em execução, podemos acompanhar a criação e o encerramento dos processos pelo comando pstree, visto anteriormente.