#include #include #include #include #include int main() { char* _args[4]; char* _env[] = { "myenv=5", NULL }; _args[0] = "bash"; _args[1] = "-c"; _args[2] = "exit $myenv"; _args[3] = NULL; pid_t pid; int err = posix_spawnp(&pid, _args[0], NULL, NULL, _args, _env); printf("posix_spawnp: %d, %d\n", err, pid); int status; pid_t waitpid_res = waitpid(pid, &status, 0); if (waitpid_res != pid) printf("posix_spawnp: waitpid didn't return pid\n"); printf("posix_spawnp: WIFEXITED(): %d, WEXITSTATUS() %d => 5\n", WIFEXITED(status), WEXITSTATUS(status)); _args[0] = "/tmp/toto"; _args[1] = NULL; err = posix_spawn(&pid, _args[0], NULL, NULL, _args, _env); printf("posix_spawn: %d, %d\n", err, pid); if (err == 0) { waitpid_res = waitpid(pid, &status, 0); if (waitpid_res != pid) printf("posix_spawn: waitpid didn't return pid\n"); printf("posix_spawn: WIFEXITED(): %d, WEXITSTATUS() %d => 127\n", WIFEXITED(status), WEXITSTATUS(status)); } else { waitpid_res = waitpid(-1, NULL, 0); printf("posix_spawn: waitpid %d, %d\n", waitpid_res, errno); } return 0; }