|
0
|
1 #include <iostream> |
|
|
2 #include <unistd.h> |
|
|
3 #include <sys/wait.h> |
|
|
4 #include <spawn.h> |
|
|
5 extern char** environ; // idk what this does |
|
|
6 int spawn(char* const argv[], const char* path) |
|
|
7 { |
|
|
8 pid_t pid; |
|
|
9 int status; |
|
|
10 status = posix_spawn(&pid, path, NULL, NULL, const_cast<char* const*>(argv), environ); |
|
|
11 if (status != 0) { |
|
|
12 std::cerr << "posix_spawn failed:" << strerror(status) << std::endl; |
|
|
13 return 1; |
|
|
14 } |
|
|
15 if (waitpid(pid, &status, 0) == -1) { |
|
|
16 perror("waitpid"); |
|
|
17 return 1; |
|
|
18 } |
|
|
19 if (WIFEXITED(status)) { |
|
|
20 return WEXITSTATUS(status); |
|
|
21 } |
|
|
22 return 1; |
|
|
23 } |