diff options
author | Silvino <silvino@bk.ru> | 2021-03-03 03:07:44 +0000 |
---|---|---|
committer | punk <punk@libernaut> | 2021-04-21 15:11:33 +0100 |
commit | 452477a2635d85ecf772a5242ce97d9479503bb3 (patch) | |
tree | a2e34d995cef5ac8068ec7047e93b1125c80d175 /dev/c/src/fork/fork_exec.c | |
parent | 4de5ad72311e351792c251eaf807885a493149a4 (diff) | |
download | doc-452477a2635d85ecf772a5242ce97d9479503bb3.tar.gz |
OpenBSD documentation
dev/c system dev rev
Diffstat (limited to 'dev/c/src/fork/fork_exec.c')
-rw-r--r-- | dev/c/src/fork/fork_exec.c | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/dev/c/src/fork/fork_exec.c b/dev/c/src/fork/fork_exec.c new file mode 100644 index 0000000..7f87c84 --- /dev/null +++ b/dev/c/src/fork/fork_exec.c @@ -0,0 +1,40 @@ +#include <sys/types.h> +#include <sys/wait.h> +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <errno.h> +#include <string.h> + +int main(){ + + pid_t cpid,ppid; + char errbuf[1024]; + + char *prog = "vim"; + char *const args[3]= {"vim", "fork_exec.c", NULL}; + + cpid = fork(); + if (cpid == -1) { + (void) snprintf(errbuf, sizeof(errbuf), + "fork: %s", strerror(errno)); + printf("%s\n", errbuf); + exit(1); + } + + if (cpid == 0) { + //child + ppid = getppid(); + if(ppid == 1){ + printf("parent died ?\n"); + _exit(1); + } + execvp(prog, args); + _exit(0); + } +/* parent */ + wait(NULL); + printf("Child id: %i\n", cpid); + return 0; +} + |