Создание 3 Процессов

12.01.2012
2
0
#1
Данная программа должна создавать 3 процесса:
1 процесс: p1=n+2
2 процесс: p2=k+5
3 процесс: p3=n+k
родитель: c=p1+p2+p3
n и k вводятся.
Процессы p1,p2,p3 считают правильно, но когда очередь доходит до родителя то он не правильно считает, наверное потому что он не получает значения p1,p2,p3.
s1,s2,s3 - pid'ы потомков.
Скажите, пожалуйста, что я неправильно написал.
Выполняется под Unix.

C++:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
void exit_failure(void)
{
printf("Descendant don't create!\n");
}
int main (void)
{
int k,n;
double c,p1,p2,p3;
printf("Enter k: ");
scanf("%d",&k);
printf("Enter n: ");
scanf("%d",&n);
pid_t s1,s2,s3;

s1=fork();
if(s1==0) //descendant
{
p1=n+2;
printf("des1 p1=%f\n",p1);
exit(1);
}
else if(s1>0) //parent
{
s2=fork();
if(s2==0) //descendant2
{
p2=k+5;
printf("des2 p2=%f\n",p2);
exit(2);
}
else if(s2>0) //parent
{
s3=fork();
if(s3==0) //descendant3
{
p3=n+k;
printf("des3 p3=%f\n",p3);
exit(3);
}
else if(s3>0) //parent
{
waitpid(s1,NULL,0);
waitpid(s2,NULL,0);
waitpid(s3,NULL,0);
printf("p1=%f\n",p1);
printf("p2=%f\n",p2);
printf("p3=%f\n",p3);
c=p1+p2+p3;
printf("Summ: %f\n",c);
exit(4);
}
else 
{
atexit(&exit_failure);
}


}
else 
{
atexit(&exit_failure);
}


}
else 
{
atexit(&exit_failure);
}

}