Linux - obsługa sygnału i powrót do dalszego wykonywania funkcji

Odpowiedz Nowy wątek
2019-05-13 20:38
0

Witam, mam dwa procesy typu producer i consumer (reprezentowane przez metody o tej nazwie). Procesy komunikują się za pomocą FIFO, producer wysyła sygnał do consumera który po jego otrzymaniu ma odczytać FIFO. Problem polega na tym że po wysłaniu sygnał dochodzi do funkcji jego obsługi i nie kontynuuje działania w procesie consumera. A chciałbym najpierw wykonać kod producera wysłać sygnał, a następnie go odebrać u consumera, obsłużyć i kontynuować kod consumera. Pominąłem część kodu by nie komplikować sytuacji.

int PID;

void handler(int sig)
{
    printf("SIGTSTP %d\n", sig);

}

void consumer(){
  PID = getpid();

  while(1){
  signal(SIGTSTP, handler); 
  // kod consumera
  }

}
void producer(){
  while(1){
  // kod producera
  kill(PID, 20);

  }
}

int main(int argc, const char *argv[]){
    if(argc == 3) {
                if(strcmp(argv[2],"CLIENT")) {                  
        consumer(); 
                } else { 
                producer(); 
                }
                exit(0);
        }
        umask(0);
        mknod(FIFO, S_IFIFO|0666, 0);
        if(fork()) {
                execl(argv[0], argv[0], FIFO, "SERVER", NULL); 
        } else {
                execl(argv[0], argv[0], FIFO, "CLIENT", NULL);
        }
        return 0;
}
edytowany 1x, ostatnio: travis.chigurh, 2019-05-13 20:43

Pozostało 580 znaków

2019-05-13 22:06
1

Jaką wartość ma PID w metodzie producer()?

Pozostało 580 znaków

2019-05-13 22:11
0

Sprawdziłem i ma wartość 0, więc sygnał nie wędruje do tego procesu :(
@Delor czyli getpid() w forku ?

Pozostało 580 znaków

2019-05-13 23:05

PID = fork();
Po forku procesy będą operować na innych obszarach pamięci.

Cały czas rozpatruj dwie sytuacje:

  1. serwer wykonuje się przed klientem
  2. klient wykonuje się przed serwerem
edytowany 1x, ostatnio: Delor, 2019-05-13 23:34

Pozostało 580 znaków

2019-05-13 23:28
0

@Delor:
Dziękuje, teraz działa poprawnie. Muszę jeszcze dokładnie przeanalizować cały proces by to dokładnie zrozumieć.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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