====== Função waitpid ====== #include #include #include #include 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; }