---
 test/Makefile |    2 +-
 test/pgrp.c   |   79 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 80 insertions(+), 1 deletions(-)
 create mode 100644 test/pgrp.c

diff --git a/test/Makefile b/test/Makefile
index 0ad576f..cad40e0 100644
--- a/test/Makefile
+++ b/test/Makefile
@@ -7,7 +7,7 @@ CFLAGS += -g $(WARNS)
 
 TESTS= onetask multitask bigmem pipes pipes2 fifo shmem \
        ipcshm ipcmsq ipcsem ipcshm_multi zombie sigpending \
-       itimer pty
+       itimer pty pgrp
 
 LDLIBS = -lm
 
diff --git a/test/pgrp.c b/test/pgrp.c
new file mode 100644
index 0000000..e685d12
--- /dev/null
+++ b/test/pgrp.c
@@ -0,0 +1,79 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+
+#define OUTFILE  "/tmp/cr-test.out"
+
+pid_t do_fork(void)
+{
+       pid_t pid = fork();
+
+       if (pid < 0) {
+               perror("fork");
+               exit(1);
+       }
+
+       return pid;
+}
+
+int main(int argc, char *argv[])
+{
+       FILE *file;
+       pid_t p1, p2;
+       int i;
+
+       close(0);
+       close(1);
+       close(2);
+
+       setsid();
+
+       unlink(OUTFILE);
+       file = fopen(OUTFILE, "w+");
+       if (!file) {
+               perror("open");
+               exit(1);
+       }
+       if (dup2(0,2) < 0) {
+               perror("dup2");
+               exit(1);
+       }
+
+       fprintf(file, "hello, world\n");
+       fflush(file);
+
+       p1 = do_fork();
+       if (p1 == 0) {
+               fprintf(file, "[%d] child born 0\n", getpid());
+               fflush(file);
+               sleep(1);
+               fprintf(file, "[%d] child exit 0\n", getpid());
+               exit(0);
+       }
+
+       p2 = do_fork();
+       if (p2 == 0) {
+               fprintf(file, "[%d] child born 1\n", getpid());
+               sleep(1);
+       } else {
+               if (setpgid(p2, p1) < 0) {
+                       perror("setpgid");
+                       exit(1);
+               }
+       }
+
+       for (i = 0; i < 15; i++) {
+               fprintf(file, "[%d] count %d\n", getpid(), i);
+               fflush(file);
+               sleep(1);
+               fflush(file);
+       }
+
+       fprintf(file, "[pid %d] world, hello\n", getpid());
+       fflush(file);
+
+       return 0;
+}
-- 
1.6.0.4

_______________________________________________
Containers mailing list
[email protected]
https://lists.linux-foundation.org/mailman/listinfo/containers

_______________________________________________
Devel mailing list
[email protected]
https://openvz.org/mailman/listinfo/devel

Reply via email to