send showerror output to kernel log if neither dos nor intuition are available
[cake.git] / test / clib / vfork.c
blob7bd35f56c7f16d95fda6d2c2ac3b1d6bbda9d3a7
1 #include <unistd.h>
2 #include <stdio.h>
3 #include <aros/debug.h>
4 #include <sys/wait.h>
5 #include "test.h"
7 int main()
9 char *argv0[] = { "Echo", "I'm child", NULL };
10 char *argv1[] = { "Echo", "I'm the second child of a parent", NULL };
11 char *argv2[] = { "Echo", "I'm child of a child", NULL };
12 char *envp[] = { NULL };
13 pid_t pid;
15 pid = vfork();
16 if((int) pid > 0)
18 printf("I'm parent, I have a child with pid %d\n", (int) pid);
19 waitpid(pid, NULL, 0);
21 else if(pid == 0)
23 execve("C:Echo", argv0, envp);
24 _exit(1);
26 else
28 TEST(0);
31 pid = vfork();
32 if((int) pid > 0)
34 printf("I'm parent, I have a first child with pid %d\n", (int) pid);
35 pid_t pid2 = vfork();
36 if((int) pid2 > 0)
38 printf("I'm parent, I have a second child with pid %d\n", (int) pid2);
39 waitpid(pid2, NULL, 0);
41 else if(pid2 == 0)
43 execve("C:Echo", argv1, envp);
44 _exit(1);
46 waitpid(pid, NULL, 0);
48 else if(pid == 0)
50 printf("I'm child of a parent\n");
51 pid_t pid2 = vfork();
52 if((int) pid2 > 0)
54 printf("I'm child, I have my child with pid %d\n", (int) pid2);
55 waitpid(pid2, NULL, 0);
57 else if(pid2 == 0)
59 execve("C:Echo", argv2, envp);
60 _exit(1);
62 _exit(0);
64 else
66 TEST(0);
69 return OK;
72 void cleanup()