#include #include #include #include #include #include #include #include int main(int argc, char** argv) { int f = 0; int n = 3; int i = 0; int fChild = 0; int pid; int status = 0; int time_to_run = 30; int dummy = 0; struct rusage ruse; struct timeval start_time; struct timeval cur_time; printf("Enter #ofprocs, time_to_run\n"); scanf("%d %d", &n, &time_to_run); gettimeofday(&start_time, NULL); printf("Forking new process.\n"); /* Fork n processes */ for (i = 0; i < n; i++) { f = fork(); if (f == 0) { printf("Child created - pid %d.\n", getpid()); fChild = 1; break; } } if (fChild == 1) { /* Set their own lottery tickets */ /* Do some work for some time - say 30secs of actual time */ do { dummy++; gettimeofday(&cur_time, NULL); } while (cur_time.tv_sec - start_time.tv_sec < time_to_run); } else { /* parent */ /* Wait for all three to finish, grab their resources */ while ( (pid = wait4(-1, &status, 0, &ruse)) != -1) { /* Print statistics */ printf("Pid %d finished.\n", pid); printf("\tTime - user %ld, sys %ld\n", ruse.ru_utime.tv_sec, ruse.ru_stime.tv_sec); printf("\tTime - user %ld, sys %ld\n", ruse.ru_utime.tv_usec, ruse.ru_stime.tv_usec); } } return 0; }