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