siginfo_t si_pid =0?

siginfo_t si_pid =0?

siginfo_t일부 정보를 수집하기 위해 필드가 있는 신호 처리기를 사용하고 있습니다 . 필드가 si_pid이면 0신호의 발신자가 수신자와 동일하다는 의미입니까? 그렇다면 마찬가지겠죠 raise(int signum)?

예: 프로세스 1은 SIGALRM을 보냅니다. 프로세스 1 신호 처리기의 출력은 si_pid0에 상대적입니다. 이는 프로세스 1이 수행하는 작업과 유사하다는 의미입니다 raise(SIGALRM).

상황은 이렇습니다.

N 프로세스가 설치되었습니다 SIGARLM . 매초마다 (BIRTH_DEATH/2)하나의 경고만 자신에게 보내기를 원합니다(예: 하나 raise(SIGARLM)). si->si_pid가 0이므로 동일한 pgrp를 갖습니다. 이 모든 프로세스가 다른 프로세스의 신호를 받는지 이해가 안 됩니다. 아니요, 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);   
}

관련 정보