xref: /dragonfly/test/sysperf/exec1.c (revision 0dace59e)
1 /*
2  * exec1.c
3  *
4  * $DragonFly: src/test/sysperf/exec1.c,v 1.2 2004/04/14 17:59:45 dillon Exp $
5  */
6 
7 #include "blib.h"
8 #include <sys/resource.h>
9 #include <sys/wait.h>
10 #include <sys/time.h>
11 
12 char *Av0;
13 
14 static
15 void
16 execltest(void)
17 {
18     pid_t pid;
19     char *elm;
20 
21     if ((elm = strrchr(Av0, '/')) == NULL)
22 	elm = Av0;
23     else
24 	++elm;
25 
26     if ((pid = vfork()) == 0) {
27 	setpriority(PRIO_PROCESS, getpid(), -20);
28 	execl(Av0, elm, "dummy", NULL);
29 	_exit(1);
30     } else if (pid < 0) {
31 	perror("vfork");
32 	exit(1);
33     } else {
34 	int status;
35 
36 	while(waitpid(pid, &status, 0) != pid)
37 	    ;
38 	if (WEXITSTATUS(status)) {
39 	    fprintf(stderr, "execl in child failed\n");
40 	    exit(1);
41 	}
42     }
43 }
44 
45 int
46 main(int ac, char **av)
47 {
48     int i;
49     int count;
50 
51     Av0 = av[0];
52     if (ac == 2)
53 	exit(0);
54 
55     count = 0;
56     start_timing();
57     while (stop_timing(0, NULL) == 0) {
58 	for (i = 0; i < 100; ++i)
59 	    execltest();
60 	count += 100;
61     }
62     count *= 5;		/* 5 second run */
63     start_timing();
64     for (i = 0; i < count; ++i)
65 	execltest();
66 #ifdef ISSTATIC
67     stop_timing(count, "execl static program:", count);
68 #else
69     stop_timing(count, "execl dynamic program:", count);
70 #endif
71     return(0);
72 }
73 
74