From 5ed8d60d1a414c05ec58ed084fa3ffe3f41677fc Mon Sep 17 00:00:00 2001 From: Ingo Weinhold Date: Thu, 21 Feb 2008 01:01:02 +0000 Subject: [PATCH] Added small setpgid() test. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24043 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/tests/system/libroot/posix/Jamfile | 2 + .../system/libroot/posix/setpgid_test.cpp | 68 +++++++++++++++++++ 2 files changed, 70 insertions(+) create mode 100644 src/tests/system/libroot/posix/setpgid_test.cpp diff --git a/src/tests/system/libroot/posix/Jamfile b/src/tests/system/libroot/posix/Jamfile index 92d9aaec61..59e440aa11 100644 --- a/src/tests/system/libroot/posix/Jamfile +++ b/src/tests/system/libroot/posix/Jamfile @@ -14,6 +14,8 @@ SimpleTest signal_test : signal_test.cpp ; +SimpleTest setpgid_test : setpgid_test.cpp ; + SimpleTest setjmp_test : setjmp_test.c ; diff --git a/src/tests/system/libroot/posix/setpgid_test.cpp b/src/tests/system/libroot/posix/setpgid_test.cpp new file mode 100644 index 0000000000..dd10ae83e0 --- /dev/null +++ b/src/tests/system/libroot/posix/setpgid_test.cpp @@ -0,0 +1,68 @@ +#include +#include +#include +#include +#include + + +int +main() +{ + pid_t parentPID = getpid(); + printf("parent pid: %d\n", parentPID); + printf("parent pgid: %d\n", getpgrp()); + + pid_t childPID = fork(); + if (childPID < 0) { + fprintf(stderr, "fork() failed: %s\n", strerror(errno)); + exit(1); + } else if (childPID == 0) { + // child + childPID = getpid(); + printf("child pid: %d, pgid: %d\n", childPID, getpgrp()); + + printf("child setpgid(0, 0)\n"); + if (setpgid(0, 0) < 0) { + fprintf(stderr, "child: first setpgid() failed: %s\n", strerror(errno)); + exit(1); + } +// printf("child setsid()\n"); +// if (setsid() < 0) { +// fprintf(stderr, "child: setsid() failed: %s\n", strerror(errno)); +// exit(1); +// } + + printf("child pgid: %d\n", getpgrp()); + + pid_t grandChildPID = fork(); + if (grandChildPID < 0) { + fprintf(stderr, "fork() 2 failed: %s\n", strerror(errno)); + exit(1); + } else if (grandChildPID == 0) { + // grand child + grandChildPID = getpid(); + printf("gchild pid: %d, pgid: %d\n", grandChildPID, getpgrp()); + sleep(2); + printf("gchild pid: %d, pgid: %d\n", grandChildPID, getpgrp()); + } else { + // child + sleep(1); + + printf("child setpgid(0, %d)\n", parentPID); + if (setpgid(0, parentPID) < 0) { +// printf("child setpgid(0, 0)\n"); +// if (setpgid(0, 0) < 0) { + fprintf(stderr, "child: second setpgid() failed: %s\n", strerror(errno)); + exit(1); + } + + printf("child pgid: %d\n", getpgrp()); + } + + } else { + // parent + sleep(3); + } + + return 0; +}