siginfo_t si_pid =0?

siginfo_t si_pid =0?

我正在使用带有siginfo_t字段的信号处理程序来收集一些信息,如果该字段si_pid0,则意味着信号的发送者与接收者相同?如果是这样的话就等于raise(int signum)对吧?

示例:进程1发送SIGALRM,进程1信号处理程序的输出相对于si_pid等于0,这意味着它就像进程1正在做什么raise(SIGALRM)

情况是这样的:

N 个进程安装SIGARLM ,每秒(BIRTH_DEATH/2)我希望它们只向自己发送一个警报(就像它是一个raise(SIGARLM)),它们具有相同的 pgrp,因为 si->si_pid 是 0 我不明白是否所有这些进程都收到其他进程的信号或不,我应该masks在信号上使用一些吗?

SIGALRM 的安装代码(所有进程都相同):

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

处理代码(我知道printf这里不好):

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

相关内容