siginfo_t si_pid = 0?

0

Estou usando um manipulador de sinal com o campo siginfo_t para reunir algumas informações, se o campo si_pid for 0 , significa que o remetente do sinal é o mesmo que o recebe? Se esse for o caso, será igual a raise(int signum) , certo?

Exemplo: O processo 1 envia SIGALRM, a saída do manipulador de sinal do Process 1 relativa a si_pid é igual a 0, isso significa que é como se Process1 estivesse fazendo raise(SIGALRM) ?

Esta é a situação:

N processos instalam SIGARLM e todo (BIRTH_DEATH/2) segundo eu quero que eles enviem APENAS PARA SI (como se fosse um raise(SIGARLM) ) um alarme, eles têm o mesmo pgrp, pois si- > si_pid é 0 Eu não entendo se todos esses processos recebem os sinais dos outros ou não, devo usar algum masks no sinal?

código de instalação para o SIGALRM (o mesmo para todos os processos):

sa_target.sa_sigaction = &a_target_reduce;
sa_target.sa_flags = SA_NODEFER | SA_RESTART | SA_SIGINFO;   
sigemptyset(&my_mask_target);      
sa_target.sa_mask = my_mask_target;
sigaction(SIGALRM, &sa_target, NULL);

alarm(BIRTH_DEATH/2);

manipulando o código (eu sei que printf não está bem aqui):

void a_target_reduce(int signal, siginfo_t *si, void *context) {
    printf("I'm %d received signal from %d real id %d\n", getpid(), si->si_pid, si->si_uid);
    counter_reduce++;
    alarm(BIRTH_DEATH/2);   
}
    
por Zeno Raiser 22.01.2018 / 15:24

0 respostas

Tags