Toy haciendo una prc de sistemas operativos, un proceso tiene que mandar a otro una señal, y cuando este último la recibe debe activarse su manejador y comenzar a funcionar...el tema es que el proceso manda la señal, pero el otro ni se cosca. Creo que mando la señal bien, pero no rula:
kill(SIGUSR1, pid); //Así mando la señal
signal(SIGUSR1, Manejador); //Así el manejador
...¿alguien puede decirme qué puede estar pasando?, please.
Programación en Linux--help me--
De primeras decir k hace casi un año k no hago nada con señales pero bueno, con tampocas cosas es dificil saber como lo haces, 1 yo miraría si el pid que estas poniendo en la funcion Kill es correctamente el del proceso que debe atender la señal, 2 miraría que cuando mandas la señal, el proceso que la espera, ya ha inicado signal, piensa que con las señales hay mazo de problemas con la sincronización, si tienes problemas con eso ya sabes semaforos posix, por último mirar que la función manejadora es llamada y hace lo k kiere k haga, ah y k una vez llamada la señal se desactiva debes volverla a activar (imagino que esto lo sabes). Siento no poderte ayudar mas, si das mas datos podemos echarle un vistazo, ah y suerte con sistemas operativos para mi una de las mejores asignaturas de la carrera. ;-)
Pongo el código de dos procesos de prueba con lo que quería explicar en el primer post.....
/*Proceso 1*/
#include "stdio.h"
#include "stdlib.h"
#include "signal.h"
void Maiker(){ //Manejador
printf("Señal recibida");
};
int main (){
int pid;
signal(SIGUSR1, Maiker); //Preparo el proceso pa una señal
pid=fork(); //Duplico el proceso
switch(pid){
case 0: //Hijo
execl("./p2.e","./p2.e",NULL); //llamo al otro proceso
break;
default: //Padre
sleep(5); //Le doy tiempo a q p2 haga sus cosas
};
printf("FIN");
return 0;
};
/*Proceso 2*/
#include .....
int main(){
kill(SIGUSR1,getppid()); //Mando una señal al proceso q me llamo
printf("Señal Lanzada");
return 0;
};
/*Tras la ejecución de p1*/
Señal Lanzada
Fin
....el manejador ni se cosca
Si alguien puede echarme una manita se agradece tela.....
hay tienes los prototipos:
int kill(pid_t pid, int sig);
int (*signal)(int signal_number, int (*function)(int));
cambia eso y te rulara :-P
PD: este weekend amos a kemar el Terrón jejeje