stress2.c

Go to the documentation of this file.
00001 // stress2.bin
00002 // Si no hay encolamiento de seņales, solo la seņal SIGUSR1 del primer hijo se recive
00003 // las otras se pierden
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("stress2a.bin", NULL, NULL)==-1)
00040                                 perror("exec");
00041                         exit (-1);
00042                 }       
00043                 if ((pides[1]=fork())==0) {
00044                         if (execve("stress2a.bin", NULL, NULL)==-1)
00045                                 perror("exec");
00046                         exit (-1);
00047                 }       
00048                 if ((pides[2]=fork())==0) {
00049                         if (execve("stress2a.bin", NULL, NULL)==-1)
00050                                 perror("exec");
00051                         exit (-1);
00052                 }       
00053                 if ((pides[3]=fork())==0) {
00054                         if (execve("stress2a.bin", NULL, NULL)==-1)
00055                                 perror("exec");
00056                         exit (-1);
00057                 }       
00058                 printf("Esperando por info de hijos creados\n");
00059                 while (hijos_creados < 4);
00060 
00061                 
00062                 
00063                 printf("\nStress info: se ha logrado ejecutar %d procesos\n", j*4);
00064                 kill(pides[0], 4);
00065                 kill(pides[1], 4);
00066                 kill(pides[2], 4);
00067                 kill(pides[3], 4);
00068         }
00069 
00070                 while (l*4 > hijos_terminados);
00071   
00072 }
00073 
00074 void catchear_hijos(int signo)
00075 {
00076         if (signo!=SIGCHLD)     {
00077                 printf("DEBERIA HABER RECIBIDO SIGCHLD y recibi: %d\n", signo);
00078                 exit(-1);
00079         }
00080         int value;
00081         hijos_terminados++;
00082         wait(&value);
00083 }
00084 
00085 void sig_usr1(int signo)
00086 {
00087         if (signo!=SIGUSR1) {
00088                 printf("en el handler de sigusr1 recibi: %d\n", signo);
00089                 exit(-1000);
00090         }
00091         hijos_creados++;
00092         printf("SIGUSR1: un hijo Ok\n");
00093 }

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