diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/process.c | 28 | ||||
| -rw-r--r-- | src/process.h | 6 |
2 files changed, 34 insertions, 0 deletions
diff --git a/src/process.c b/src/process.c new file mode 100644 index 0000000..3dd93f0 --- /dev/null +++ b/src/process.c @@ -0,0 +1,28 @@ +#include "process.h" +#include "err.h" +#include "log.h" +#include <sys/wait.h> +#include <unistd.h> + +int +spawn(char **argv) +{ + pid_t pid; + + if (!argv[0] || *argv[0] == '\0') { + log_write(LOG_ERR, "Invalid argv"); + return -1; + } + + if ((pid = fork()) < 0) { + log_write(LOG_ERR, "fork error"); + } else if (pid == 0) { + if (execvp(argv[0], argv) < 0) { + die("exec error"); + } + } else { + wait(NULL); + } + + return 0; +} diff --git a/src/process.h b/src/process.h new file mode 100644 index 0000000..b817fa9 --- /dev/null +++ b/src/process.h @@ -0,0 +1,6 @@ +#ifndef SF_PROCESS_H +#define SF_PROCESS_H + +int spawn(char **argv); + +#endif /* SF_PROCESS_H */ |
