Program do komunikacji między procesami za pomocą sygnałów

0

Cześć,

potrzebuje napisac program do komunikacji między dwoma procesami za pomocą SIGUSR1.

Mam coś takiego:

#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>

void send_SIGUSR1();

void main()
{
int pid;

if ((pid = fork()) < 0) {
    perror("Error Fork");
    exit(1);
}

if (pid == 0) {
    signal(SIGUSR1, send_SIGUSR1());
}

else
{
    printf("\nPARENT: sending SIGUSR1\n\n");
    kill(pid, SIGUSR1);
}
}

void send_SIGUSR1()

{
signal(SIGUSR1, send_SIGUSR1);
printf("CHILD: I have received a SIGUSR1\n");
}

Nie chcę wyświetlić mi komunikatu otrzymania sygnału, w czym tkwi problem?

0
if (pid == 0) {
  signal(SIGUSR1, send_SIGUSR1);
}
0

Efekt jest ten sam.

1

Po zrobieniu forka Twoje dziecko niemalże od razu ginie (nie ma dalszych instrukcji do wykonywania - choćby jakiegoś while (1);), więc nie ma szansy odebrać sygnału,

W takiej wersji powinno śmigać:

/* ... */

signal(SIGUSR1, &send_SIGUSR1);

/* ... */

if (pid == 0) {
  printf("I'm the child.");
  while (1);
} else {
  printf("I'm the parent.");
  kill(pid, SIGUSR1);
}
0

Dzięki stary. Gdybym chciał przerobić to teraz, aby dziecko jak i rodzic mogło odbierać/wysyłać non stop sygnał mogę użyć forka czy jest jakaś inna funkcja? Coś takiego:
title

1

fork() + kill() powinny dać radę - jeśli coś Ci nie śmiga w tym zestawie, podeślij kod i przeanalizujemy :-)

1 użytkowników online, w tym zalogowanych: 0, gości: 1