int main(int argc, char *argv[]) { pid_t childPid; int i, j, dummy; struct tms tms; setbuf(stdout, NULL); switch (childPid = fork()) { case -1: errExit("fork"); break; case 0: /* child */ for (i = 0; i < LOOP; i++) { /* consume some system CPU time */ times(&tms); /* consume some user CPU time */ for (j = 0; j < LOOP*100; j++) dummy = dummy * j + i; } _exit(EXIT_SUCCESS); default: /* parent */ sleep(2); printf("before wait\n"); printRusage(RUSAGE_CHILDREN); wait(NULL); printf("after wait\n"); printRusage(RUSAGE_CHILDREN); } exit(EXIT_SUCCESS); }
int main(int argc, char *argv[]) { pid_t childPid; struct rusage ru; if (argc < 2 || strcmp(argv[1], "--help") == 0) usageErr("%s command arg...\n", argv[0]); switch (childPid = fork()) { case -1: errExit("fork"); case 0: execvp(argv[1], &argv[1]); errExit("execvp"); default: printf("Command PID: %ld\n", (long) childPid); if (wait(NULL) == -1) errExit("wait"); if (getrusage(RUSAGE_CHILDREN, &ru) == -1) errExit("getrusage"); printf("\n"); printRusage("\t", &ru); exit(EXIT_SUCCESS); } }
int main(int argc, char *argv[]) { pid_t childPid; switch (childPid = fork()) { case -1: errExit("fork"); break; case 0: /* child */ execvp(argv[1], &argv[1]); errExit("execvp"); default: /* parent */ wait(NULL); printRusage(argv[1]); } exit(EXIT_SUCCESS); }