Added small setpgid() test.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24043 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Ingo Weinhold
2008-02-21 01:01:02 +00:00
parent 2efb87b92f
commit 5ed8d60d1a
2 changed files with 70 additions and 0 deletions
+2
View File
@@ -14,6 +14,8 @@ SimpleTest signal_test
: signal_test.cpp
;
SimpleTest setpgid_test : setpgid_test.cpp ;
SimpleTest setjmp_test
: setjmp_test.c
;
@@ -0,0 +1,68 @@
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
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;
}