00001
00002
00003
00004 #include <stdarg.h>
00005 #include <routix.h>
00006 #include <sys/types.h>
00007 #include <lib/routix.h>
00008 #include <signal.h>
00009
00010 char msg[40];
00011
00012 #define DEMORA 0xaffff
00013
00014 pid_t pides[4];
00015 void catchear_hijos(int);
00016 void sig_usr1(int);
00017
00018 int hijos_terminados;
00019 int hijos_creados;
00020
00021
00022 void main(void)
00023 {
00024 signal(SIGUSR1, sig_usr1);
00025
00026 int i, j;
00027 int l = getvar("veces");
00028 if (l==-1) {
00029 printf("No existe el valor veces. Seteandolo por default a 10");
00030 l = 10;
00031 }
00032
00033 signal(SIGCHLD, catchear_hijos);
00034
00035 for (j=1 ; j<=l ; j++) {
00036
00037 hijos_creados = 0;
00038 if ((pides[0]=fork())==0) {
00039 if (execve("stress1a.bin", NULL, NULL)==-1)
00040 perror("exec");
00041 exit (-1);
00042 }
00043 for( i=0 ; i<DEMORA ; i++);
00044
00045 if ((pides[1]=fork())==0) {
00046 if (execve("stress1a.bin", NULL, NULL)==-1)
00047 perror("exec");
00048 exit (-1);
00049 }
00050 for( i=0 ; i<DEMORA ; i++);
00051
00052 if ((pides[2]=fork())==0) {
00053 if (execve("stress1a.bin", NULL, NULL)==-1)
00054 perror("exec");
00055 exit (-1);
00056 }
00057 for( i=0 ; i<DEMORA ; i++);
00058
00059 if ((pides[3]=fork())==0) {
00060 if (execve("stress1a.bin", NULL, NULL)==-1)
00061 perror("exec");
00062 exit (-1);
00063 }
00064 while (hijos_creados < 4);
00065
00066 printf("\nStress info: se ha logrado ejecutar %d procesos\n", j*4);
00067 kill(pides[0], 4);
00068 for( i=0 ; i<DEMORA ; i++);
00069 kill(pides[1], 4);
00070 for( i=0 ; i<DEMORA ; i++);
00071 kill(pides[2], 4);
00072 for( i=0 ; i<DEMORA ; i++);
00073 kill(pides[3], 4);
00074 }
00075
00076 while (l*4 > hijos_terminados);
00077
00078 }
00079
00080 void catchear_hijos(int signo)
00081 {
00082 if (signo!=SIGCHLD) {
00083 printf("DEBERIA HABER RECIBIDO SIGCHLD y recibi: %d\n", signo);
00084 exit(-1);
00085 }
00086 int value;
00087 hijos_terminados++;
00088 wait(&value);
00089 }
00090
00091 void sig_usr1(int signo)
00092 {
00093 if (signo!=SIGUSR1) {
00094 printf("en el handler de sigusr1 recibi: %d\n", signo);
00095 exit(-1000);
00096 }
00097 hijos_creados++;
00098 printf("SIGUSR1: un hijo Ok\n");
00099 }