Ferramentas do usuário

Ferramentas do site


waitpid

Função waitpid

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h> 
 
int main(void)
{
   pid_t iPid;
   int iStatus;
 
 
   if( (iPid = fork())<0) /* cria um processo filho */
   {
      perror("Erro no fork");
      return 0;
   }
 
   if( iPid != 0) /* no processo pai*/
   {
      printf("\nCriado o processo %d", iPid);
      while(1)
      {
         printf("\nEsperando o status do filho.");
         waitpid(iPid,&iStatus,WUNTRACED);
         printf("\nStatus do filho pego.");
 
         if( WIFEXITED(iStatus) )
         {
            printf("\nFilho terminou normalmente");
            printf("\nO status de término foi %d.", WEXITSTATUS(iStatus));
            break;
         }
         if( WIFSIGNALED(iStatus) )
         {
            printf("\nFilho recebeu sinal e terminou");
            printf("\nO sinal que terminou o filho foi %d.", WTERMSIG(iStatus));
            break;
         }
 
         if( WIFSTOPPED(iStatus) )
         {
            printf("\nFilho recebeu sinal stop");
            printf("\nO sinal que parou o filho foi %d.", WSTOPSIG(iStatus));
         }
     }
   }
   else /* no processo filho */
   {
      /* fica em loop esperando um sinal via comando kill ou ate terminar */
      int i;
      printf("\nFilho %d em execucao", getpid());
      for(i=0;i<20;i++)
      {
         printf("\nFilho faltam %d segundos para terminar.", 20-i);
         sleep(1);
      }
   }
   return 0;
}
waitpid.txt · Última modificação: 2023/09/12 16:14 por 127.0.0.1