#include #include #include #include #include #include #include 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; }