Ver Mensaje Individual
  #3 (permalink)  
Antiguo 19/08/2008, 22:11
Avatar de HackmanC
HackmanC
 
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 17 años
Puntos: 260
Sonrisa Respuesta: Señales en Linux

Hola,

Cita:
Iniciado por anterma Ver Mensaje
Hola,

Estoy realizando en c un programa que trabaja sobre Debian que crea varios hijos. Mi duda es: ¿existe alguna señal predetermianda del ssoo que sea enviada al cada hijo cuando su padre muere? En caso negativo, ¿cómo podria implementarlo?

Saludos.
Creo que no hay ninguna señal que envíe el padre al hijo cuando termina.
SIGCHLD es enviado por el hijo cuando termina. Pero puedes usar tu propia señal.
Como por ejemplo:

Código:
#include <errno.h>
#include <signal.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>

static int child_pid = 0;
static int wstatus = 0;

static void def_handler(int sig)
{
  fprintf(stderr, "Señal de salida %d recibida.\n", sig);
}

int main()
{
  printf("proceso padre creado:%d.\n", getpid());

  if ((child_pid = fork()) < 0) {
    fprintf(stderr, "falló fork(). error:%d %s.\n",
      errno, strerror(errno));
    return 1;
  }

  if(child_pid == 0) {
    printf("proceso hijo creado:%d.\n", getpid());
    if (signal(SIGUSR1, def_handler) == SIG_ERR) {
      // el hijo va a recibir el mensaje SIGUSR1
      fprintf(stderr, "falló signal(SIGUSR1). error:%d %s.\n",
        errno, strerror(errno));
        exit(1);
    }
    pause(); // espera el mensaje
  } else {
    kill(child_pid, SIGUSR1); // el padre envía el mensaje que va a salir.
    wait(&wstatus); // espera a sus hijitos o se convierten en zombies / huerfanos. :)
  }

  printf("proceso muerto:%d.\n", getpid());
  return 0;
}
Saludos,