/* * Exemplo de uso de execve. * Executa o programa passado como argumento. * Verifica status da execução do filho. */ #include #include #include #include int main(int argc, char **argv, char **envp) { int pid, status; if (argc < 2) { fprintf (stderr, "Uso: %s cmd arg1 ... argn\n", argv[0]); return 1; } if ((pid = fork()) == 0) { /* Processo filho */ execve(argv[1], &argv[1], envp); fprintf(stderr,"Não conseguiu executar execve.\n"); return 2; } else { /* Processo pai */ waitpid (pid, &status, 0); if (WIFEXITED(status)) if (WEXITSTATUS(status) == 0) printf ("Filho terminou sem problemas.\n"); else printf ("Filho retornou código %d.\n", WEXITSTATUS(status)); else if (WIFSIGNALED(status)) /* Deve ser verdade! */ printf("Filho recebeu um sinal %d.\n", WTERMSIG(status)); } return 0; }