siginfo_t si_pid = 0?

siginfo_t si_pid = 0?

siginfo_tいくつかの情報を収集するためにフィールドを持つ信号ハンドラを使用しています。フィールドがsi_pidある場合、0信号の送信者が受信者と同じであることを意味しますか?それなら、同じでしょうかraise(int signum)

例:プロセス1はSIGALRMを送信します。プロセス1信号ハンドラの出力はsi_pidゼロに相対的である。これは、プロセス1が実行する作業と似ていることを意味しますraise(SIGALRM)

状況はこんな感じです。

NプロセスがインストールされましたSIGARLM 。毎秒(BIRTH_DEATH/2)1つの警告のみを自分に送信したい(たとえば1つ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);   
}

ベストアンサー1

おすすめ記事