Я создал программу.Предполагается, что он читает сигналы из второго окна терминала и реагирует в зависимости от того, какой сигнал и в какой процесс он отправлен.Например, мой дочерний процесс 1 должен игнорировать все сигналы, кроме SIGUSR1 и SIGXFSZ.Когда вызывается SIGUSR1, он должен напечатать некоторую информацию (что я и сделал) и закончить.Однако, когда вызывается SIGXFSZ, он должен отправить тот же сигнал процессу parrent.Как я могу это сделать?
Должно ли
if(sig == SIGXFSZ) {
kill(number, getppid()); //where number is number for SIGXFSZ signal
}
помещаться в функцию sig_handler?
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
void signals_handler(int signal){
psignal(signal,"\nOtrzymalem sygnal");
printf("Numer sygnalu to: %d\n", signal);
kill(getppid(), signal);
return;
}
void sig_handler (int sig){
signal(SIGUSR1, sig_handler);
sigset_t mask_set;
sigset_t old_set;
sigfillset(&mask_set);
sigdelset(&mask_set, SIGINT);
// sigdelset(&mask_set, SIGUSR1);
sigprocmask(SIG_SETMASK, &mask_set, &old_set);
// psignal(sig, "\nOdebralem sygnal");
printf("Numer sygnału: %d. ^C mnie nie zamknie! %d\n", sig, getppid());
printf("HEHHEHEHEHE");
for (;;)
pause(); //czy teraz zostanie przyjęty i obsłużony SIGUSR1?
sigprocmask(SIG_SETMASK, &old_set, NULL);
return;
}
int main(void) {
printf("PID: %d\n", getpid());
/* zastawiamy "pulapke" na sygnal */
signal(SIGINT, signals_handler);
if(fork() == 0) { //forking
printf("PPID: %d\n", getpid());
signal(SIGUSR1, sig_handler);
sleep(100);
exit(0);
}
if(fork() == 0) { //forking
printf("PPID: %d\n", getpid());
signal(SIGUSR1, sig_handler);
sleep(100);
exit(0);
}
/* petla nieskonczona */
for(;;)
pause();
return 0;
}