#include <stdio.h>
#include <unistd.h>
int main(int argc, char **argv)
{
int pid, ppid, pgid;
pid = getpid();
ppid = getppid();
pgid = getpgid(0);
printf("[%s] Pid=%d Ppid=%d Pgid=%d\n"
, argv[0], pid, ppid, pgid);
return 0;
}
#include <stdio.h>
#include <unistd.h>
int main(void)
{
int pid, pid2;
pid = fork();
if (pid == -1) return 1;
if (pid) {
char *args[] = { "Parent", NULL};
sleep(3);
execve("./ppid", args, NULL);
} else {
pid = getpid();
setpgid(pid,pid);
pid2 = fork();
if (pid2 == -1) return 1;
if (pid2) {
char *args[] = { "Child1", NULL};
sleep(2);
execve("./ppid", args, NULL);
} else {
char *args[] = { "Child2", NULL};
sleep(1);
execve("./ppid", args, NULL);
}
}
return 0;
}
:
$ ./testppid
[Child2] Pid=6220 Ppid=6219 Pgid=6219
[Child1] Pid=6219 Ppid=6218 Pgid=6219
[Parent] Pid=6218 Ppid=27410 Pgid=6218
$
, (pid = 27410) , Child1, Child2: {fork, setpgid, exec}. Child1 Child2 ()