initial commit
[pfinal.git] / Routix / tareas / stress2 / stress2.c
blobc956d402975fbcc5637ecbfda9ab167b83c35424
1 // stress2.bin
2 // Si no hay encolamiento de señales, solo la señal SIGUSR1 del primer hijo se recive
3 // las otras se pierden
4 #include <stdarg.h>
5 #include <routix.h>
6 #include <sys/types.h>
7 #include <lib/routix.h>
8 #include <signal.h>
10 char msg[40];
12 #define DEMORA 0xaffff
14 pid_t pides[4];
15 void catchear_hijos(int);
16 void sig_usr1(int);
18 int hijos_terminados;
19 int hijos_creados;
22 void main(void)
24 struct sigaction senal;
25 sigfillset(&senal.sa_mask);
26 senal.sa_handler = sig_usr1;
27 sigaction(SIGUSR1, &senal, NULL);
28 // signal(SIGUSR1, sig_usr1);
30 int i, j;
31 int l = getvar("veces");
32 if (l==-1) {
33 printf("No existe el valor veces. Seteandolo por default a 10");
34 l = 10;
36 sigfillset(&senal.sa_mask);
37 senal.sa_handler = catchear_hijos;
38 sigaction(SIGCHLD, &senal, NULL);
40 // signal(SIGCHLD, catchear_hijos);
42 for (j=1 ; j<=l ; j++) {
44 hijos_creados = 0;
46 if ((pides[0]=fork())==0) {
47 if (execve("stress2a.bin", NULL, NULL)==-1)
48 perror("exec");
49 exit (-1);
51 if ((pides[1]=fork())==0) {
52 if (execve("stress2a.bin", NULL, NULL)==-1)
53 perror("exec");
54 exit (-1);
56 if ((pides[2]=fork())==0) {
57 if (execve("stress2a.bin", NULL, NULL)==-1)
58 perror("exec");
59 exit (-1);
61 if ((pides[3]=fork())==0) {
62 if (execve("stress2a.bin", NULL, NULL)==-1)
63 perror("exec");
64 exit (-1);
66 printf("Esperando por info de hijos creados\n");
67 while (hijos_creados < 4)
68 usleep(100000);
71 printf("\nStress info: se ha logrado ejecutar %d procesos\n", j*4);
72 kill(pides[0], 4);
73 kill(pides[1], 4);
74 kill(pides[2], 4);
75 kill(pides[3], 4);
78 while (l*4 > hijos_terminados);
82 void catchear_hijos(int signo)
84 if (signo!=SIGCHLD) {
85 printf("DEBERIA HABER RECIBIDO SIGCHLD y recibi: %d\n", signo);
86 exit(-1);
88 int value;
89 hijos_terminados++;
90 wait(&value);
93 void sig_usr1(int signo)
95 if (signo!=SIGUSR1) {
96 printf("en el handler de sigusr1 recibi: %d\n", signo);
97 exit(-1000);
99 hijos_creados++;
100 printf("SIGUSR1: un hijo Ok\n");