home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / bsd_srcs / sys / tests / benchmarks / execs.c < prev    next >
Encoding:
C/C++ Source or Header  |  1985-05-06  |  1.0 KB  |  55 lines

  1. /*
  2.  * Benchmark program to calculate exec
  3.  * overhead (approximately).  Process
  4.  * forks and execs "null" test program.
  5.  * The time to run the fork program should
  6.  * then be deducted from this one to
  7.  * estimate the overhead for the exec.
  8.  */
  9.  
  10. main(argc, argv)
  11.     char *argv[];
  12. {
  13.     register int nexecs, i;
  14.     char *cp, *sbrk();
  15.     int pid, child, status, brksize;
  16.  
  17.     if (argc < 3) {
  18.         printf("usage: %s number-of-execs sbrk-size job-name\n",
  19.             argv[0]);
  20.         exit(1);
  21.     }
  22.     nexecs = atoi(argv[1]);
  23.     if (nexecs < 0) {
  24.         printf("%s: bad number of execs\n", argv[1]);
  25.         exit(2);
  26.     }
  27.     brksize = atoi(argv[2]);
  28.     if (brksize < 0) {
  29.         printf("%s: bad size to sbrk\n", argv[2]);
  30.         exit(3);
  31.     }
  32.     cp = sbrk(brksize);
  33.     if ((int)cp == -1) {
  34.         perror("sbrk");
  35.         exit(4);
  36.     }
  37.     for (i = 0; i < brksize; i += 1024)
  38.         cp[i] = i;
  39.     while (nexecs-- > 0) {
  40.         child = fork();
  41.         if (child == -1) {
  42.             perror("fork");
  43.             exit(-1);
  44.         }
  45.         if (child == 0) {
  46.             execv(argv[3], argv);
  47.             perror("execv");
  48.             _exit(-1);
  49.         }
  50.         while ((pid = wait(&status)) != -1 && pid != child)
  51.             ;
  52.     }
  53.     exit(0);
  54. }
  55.