elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


+  Foro de elhacker.net
|-+  Sistemas Operativos
| |-+  GNU/Linux (Moderador: MinusFour)
| | |-+  Signals Linux
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Signals Linux  (Leído 1,648 veces)
jordibr7

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Signals Linux
« en: 6 Diciembre 2013, 11:10 am »

Hola a todos,

Soy nuevo por aquí, aunque entre varias veces, nunca comenté pero hoy me atreví! Mira os cuento, tengo una duda con las señales que se pueden enviar a un proceso. Tengo un programa que crea un hijo y los dos procesos, capturan la señal SIGINT (Ctrl+c). Es más o menos así:

#include <signal.h>
#include <stdio.h>

void pHijo(int x){
   printf("Soy el hijo\n");
}


void pFather(int x){
   printf("Soy el padre\n");
}

int main(int argc, char* argv[]){
   
   if(fork()==0){
      signal(SIGQUIT, pHijo);
   }else{
      signal(SIGQUIT, pFather);
   }

   while(1)
      pause();
}

Mi duda entra, si mando:
kill -SIGINT pid_proceso_padre
Sale por pantalla:
Soy el padre

Hasta aquí todo normal, pero cuando mando ctrl+c sale:
Soy el padre
Soy el hijo

Entiendo yo que el hijo recibe la señal, pero porqué? quien es el que se la manda, bash no puede ser porqué si cambio el intérprete en /etc/passwd logeo con el usuario que le cambie el intérprete aprieto ctrl+c y salen los dos mensajes. Quien es el encargado de enviar la señal a los procesos cuando hago ctrl+c? Es que no encuentro documentación... Gracias!




En línea

desikoder

Desconectado Desconectado

Mensajes: 35



Ver Perfil
Re: Signals Linux
« Respuesta #1 en: 9 Diciembre 2013, 22:23 pm »

Veamos , no estoy seguro del todo de lo que te esta pasando pero te explico :
En primer lugar , da igual que cambies de shell , las shells al pulsar CTRL + C envian un SIGINT al proceso actual que este usando el TTY de la shell. Por tanto debes de tener en cuenta que al pulsar CTRL + C se envia un sigint , la gracia del asunto es que probablemente bash este enviando el SIGINT a todos los procesos que usen este TTY , y de ahi que se lanzen tanto el print del padre como el del hijo

De todos modos voy a compilarlo y a probar mi hipotesis en mi ordenador , luego actualizare el post

EDITO :

He estado compilandolo y haciendo pruebas en mi ordenador , ocurre lo que tu comentas por cierto , cambia en tu code SIGQUIT por SIGINT , si no no funciona

Te recuerdo que en unix si un proceso recibe una señal sus hijos la reciben , por ejeplo si matas el proceso init matarias el resto de procesos , y el asunto este se define al lanzar un nuevo proceso , si dependera de su proceso padre o algo , creo que es asi , bueno , mañana seguire investigandolo

Saludos


« Última modificación: 9 Diciembre 2013, 22:34 pm por desikoder » En línea

Solucion a CUALQUIER problema que tengas en PC's con windows :

Instalar GNU / linux
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Qual fue vuestra primera distro de linux y por que decidisteis ir a linux? « 1 2 3 »
GNU/Linux
ShAdoW-PmP 22 11,301 Último mensaje 4 Agosto 2015, 12:28 pm
por FKT
Porque los juegos para linux no ruedan bien en linux « 1 2 3 »
GNU/Linux
portaro 21 17,211 Último mensaje 4 Julio 2010, 00:00 am
por portaro
[Taller] Signals y Slots en Qt.
Programación C/C++
[L]ord [R]NA 8 9,890 Último mensaje 18 Noviembre 2015, 01:39 am
por sizeofc
Necesito algo de ayuda en c++.
Programación C/C++
anonimo12121 2 2,026 Último mensaje 9 Junio 2013, 18:56 pm
por anonimo12121
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines