Как отправить сигнал от ребенка при определенных условиях? - PullRequest
0 голосов
/ 21 ноября 2018

Я создал программу.Предполагается, что он читает сигналы из второго окна терминала и реагирует в зависимости от того, какой сигнал и в какой процесс он отправлен.Например, мой дочерний процесс 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;
}
...