Programación General > C/C++
Ignorar señales
(1/1)
meana:
Hola
Estoy programando un pequeño shell y en estos momentos estoy intentando hacer que este sea inmune a ciertas señales como por ejemplo SIGINT (Ctrl+C), pero que no lo sean los procesos que este lanza. Por el momento lo único que consigo es que todos sean inmunes o en su defecto que no lo sea únicamente el primer proceso que lanzo, no se si me estare explicando muy bien sorry, os dejo el codigo de captura y tratamiento de señales que tengo hecho en ambas versiones a ver si alguno de vosotros me puede decir algo
Esta es la version en la que todos los procesos son inmunes
--- Código: ---void Manejador(int sig) {
cout << "\n";
signal(sig, SIG_IGN);
}
int main() {
pid_t pid;
struct sigaction act;
act.sa_handler=Manejador;
act.sa_flags=0;
sigemptyset(&act.sa_mask);
sigaction(SIGINT, &act, NULL);
kill(pid, SIGINT);
--- Fin del código ---
Esta version son inmunes todos, menos el primer proceso que lanzo
--- Código: ---void Manejador(int sig) {
if(sig==SIGINT) signal(SIGINT, SIG_IGN);
}
int main() {
signal(SIGINT, Manejador);
--- Fin del código ---
por cierto estoy programando en UNIX
meana:
Bueno por si le sirve a alguien en algun momento me contestare a mi mismo...
La verdad al final resulto mas sencillo de lo que yo creia y como en casi todas estas cosas son tonterias de las que no te das cuenta en mucho tiempo. Bueno entrando en lo que importa.
Nada mas entrar en el main tienes que capturar la señal SIGINT e ignorarla directamente con el siguiente codigo:
--- Código: --- struct sigaction sig;
sig.sa_handler=SIG_IGN;
sig.sa_flags=0;
sigemptyset(&sig.sa_mask);
sigaction(SIGINT, &sig, NULL);
--- Fin del código ---
Una vez hecho esto como los procesos hijos se crean mediante un fork debemos volver a colocar la accion a la señal como estaba para ello empleamos el siguiente codigo:
--- Código: --- sig.sa_handler=SIG_DFL;
sig.sa_flags=0;
sigemptyset(&sig.sa_mask);
sigaction(SIGINT, &sig, NULL);
--- Fin del código ---
Este último trozo de codigo se debe de colocar la parte que ejecuta unicamente el proceso hijo, si no al padre le volveria a afectar el Ctrl+C
Espero que le pueda servir a alguien
Navegación
Ir a la versión completa