Comunicación entre dos procesos usando señales en C

Requisito previo: manejo de señal C

En esta publicación, la comunicación entre los procesos padre e hijo se realiza mediante la llamada al sistema kill() y signal(), fork().

  • fork() crea el proceso hijo a partir del padre. El pid se puede verificar para decidir si es el hijo (si pid == 0) o el padre (pid = id del proceso hijo).
  • El padre puede entonces enviar mensajes al hijo usando el pid y kill().
  • El niño capta estas señales con signal() y llama a las funciones apropiadas.

Ejemplo de cómo 2 procesos pueden comunicarse entre sí usando kill() y signal():

// C program to implement sighup(), sigint()
// and sigquit() signal functions
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
  
// function declaration
void sighup();
void sigint();
void sigquit();
  
// driver code
void main()
{
    int pid;
  
    /* get child process */
    if ((pid = fork()) < 0) {
        perror("fork");
        exit(1);
    }
  
    if (pid == 0) { /* child */
        signal(SIGHUP, sighup);
        signal(SIGINT, sigint);
        signal(SIGQUIT, sigquit);
        for (;;)
            ; /* loop for ever */
    }
  
    else /* parent */
    { /* pid hold id of child */
        printf("\nPARENT: sending SIGHUP\n\n");
        kill(pid, SIGHUP);
  
        sleep(3); /* pause for 3 secs */
        printf("\nPARENT: sending SIGINT\n\n");
        kill(pid, SIGINT);
  
        sleep(3); /* pause for 3 secs */
        printf("\nPARENT: sending SIGQUIT\n\n");
        kill(pid, SIGQUIT);
        sleep(3);
    }
}
  
// sighup() function definition
void sighup()
  
{
    signal(SIGHUP, sighup); /* reset signal */
    printf("CHILD: I have received a SIGHUP\n");
}
  
// sigint() function definition
void sigint()
  
{
    signal(SIGINT, sigint); /* reset signal */
    printf("CHILD: I have received a SIGINT\n");
}
  
// sigquit() function definition
void sigquit()
{
    printf("My DADDY has Killed me!!!\n");
    exit(0);
}

Producción:

Publicación traducida automáticamente

Artículo escrito por Kishor Mishra y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *