I am going to check this out for you, but let me tell you what I expect.
/ pid2 = [child3 pid] {pid1 = child1; pid2 = child3;}
pid1 = [child1 pid] fork ()
/ \
/ pid2=0 { pid1 = child1;pid2 = 0;}
fork()
\ pid2=[child2 pid] { pid1 = 0; pid2 = child2;}
\ /
pid1=0 - fork()
\
pid2=0 { pid1 = 0; pid2 = 0;}
EDIT .
#include <stdio.h>
#include <unistd.h>
int main()
{
pid_t pid1, pid2;
pid1 = fork();
pid2 = fork();
printf("PID %d: pid1=%d, pid2=%d\n",getpid() ,pid1, pid2);
exit(0);
}
:
PID 30805: pid1 = 30806, pid2 = 30807
PID 30806: pid1 = 0, pid2 = 30808
PID 30807: pid1 = 30806, pid2 = 0
PID 30808: pid1 = 0, pid2 = 0