Autor
|
Tema: Signals Linux (Leído 1,853 veces)
|
jordibr7
Desconectado
Mensajes: 1
|
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
Mensajes: 35
|
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
|
|
|
|
|