All pastes #1603395 Raw Edit

Mesh's Forking Problem

public c v1 · immutable
#1603395 ·published 2009-10-08 05:47 UTC
rendered paste body
#include <sys/types.h>#include <sys/wait.h>#include <stdio.h>#include <unistd.h>#include <stdlib.h>#include <sys/times.h>#include <time.h> int sum;int factorial (int n){    if (n == 0)        return 1;    else        return (n * factorial (n-1));}int forkloop (int n){    int i;     if (n == 0)        sum = 0;            else if (n == 1)        sum = 1;        else {        pid_t pid;         for (i = n;  i > 0; i--) {            if (fork() == 0) {                int rv;                rv = factorial(i);                exit(rv);        }            else if (pid < 0) { /* error */                fprintf(stderr, "Fork failed\n");                return 1;            }            else /* parent process */            {                int val;                              wait(&val);                sum = sum + WEXITSTATUS(val);                //return 0;            }        }    }    return 0;} int main(){    clock_t start, end;    double elapsed = 1.0;    struct tms tm;    int i;    int input;      printf("Please input an integer value to be factored (keep it small): ");  scanf("%d", &input);     start = times(&tm);        forkloop(input);            end = clock();    for(i = 0; i < 2000000; i++)        elapsed += (i + elapsed)* (1 - 0.5*elapsed);    end = times(&tm);        printf("The final factoral sum of: %d is: %d\n", input, sum);    printf("Start End are: %ld %ld\n", (long)start, (long)end);    elapsed = end - start;    printf("Elapsed time is %lf\n", elapsed);        printf("TMS time User CPU time is %ld \n", (long) tm.tms_utime);        return 0;}