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;
}