stress1.c

Go to the documentation of this file.
00001 // stress2.bin
00002 // Ejecuta la tarea stack.bin mcuhas veces, en busca de memory leeks 
00003 // o colgadas
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 }

Generated on Sun May 30 18:38:35 2004 for Routix OS by doxygen 1.3.6