#include #include #include #include #include int main(void) { // Chamada fork... pid_t pid = fork(); // Se o fork falhar... if (pid < 0) { perror("fork falhou"); exit(EXIT_FAILURE); } /* Um segundo processo é criado e o código seguinte será executado por ambos os processos (eles são idênticos!), mas com valores de pid diferentes: - Para o processo filho, pid == 0 - Para o processo pai, pid == PID do processo filho Por isso temos essa estrutura if... */ if (pid == 0) { // Processo filho... printf("[Filho] PID: %d, iniciado.\n", getpid()); char *args[] = {"ls", "-l", NULL}; // Chamada exec (execvp)... execvp(args[0], args); // Se execvp falhar... perror("execvp falhou"); exit(EXIT_FAILURE); } else { // Processo pai... printf("[Pai] PID: %d, criou filho PID: %d\n", getpid(), pid); printf("[Pai] Aguardando término do filho...\n"); int status; waitpid(pid, &status, 0); printf("[Pai] Processo filho %d terminou com status %d\n", pid, WEXITSTATUS(status)); printf("[Pai] Voltando ao controle.\n"); } return 0; }