Sigfunc_rt * Signal_rt(int signo, Sigfunc_rt *func) { Sigfunc_rt *sigfunc; if ( (sigfunc = signal_rt(signo, func)) == (Sigfunc_rt *) SIG_ERR) err_sys("signal_rt error"); return(sigfunc); }
int main(int argc, char const *argv[]) { int i,j; pid_t pid; sigset_t newset; union sigval val; printf("SIGRTMIN =%d,SIGRTMAX= %d\n",(int)SIGRTMIN,(int)SIGRTMAX); if (0 ==(pid = fork())) { sigemptyset(&newset); sigaddset(&newset,SIGRTMAX); sigaddset(&newset,SIGRTMAX-1); sigaddset(&newset,SIGRTMAX-2); sigprocmask(SIG_BLOCK,&newset,NULL); signal_rt(SIGRTMAX,sig_rt,&newset); signal_rt(SIGRTMAX-1,sig_rt,&newset); signal_rt(SIGRTMAX-2,sig_rt,&newset); printf("child sleep 6s------\n"); sleep(6); sigprocmask(SIG_UNBLOCK,&newset,NULL); printf("child sleep 3s------\n"); sleep(3); exit(0); } printf("father sleep 3s------\n"); sleep(3); for (i = SIGRTMAX; i >= SIGRTMAX-2; i--) { for (j = 0; j <=2; ++j) { val.sival_int =j; sigqueue(pid,i,val); printf("send signal %d,val=%d\n", i,j); } } return 0; }
int main(int argc,char **argv) { int i,j; pid_t pid; sigset_t newset; union sigval val; printf("SIGRTMIN = %d,SIGRTMAX = %d\n",(int) SIGRTMIN,(int )SIGRTMAX ); if((pid=Fork())==0) { Sigemptyset(&newset); Sigaddset(&newset,SIGRTMAX); Sigaddset(&newset,SIGRTMAX-1); Sigaddset(&newset,SIGRTMAX-2); Sigprocmask(SIG_BLOCK,&newset,NULL); Signal_rt(SIGRTMAX,sig_rt); Signal_rt(SIGRTMAX-1,sig_rt); signal_rt(SIGRTMAX-2,sig_rt); sleep(6); Sigprocmask(SIG_UNBLOCK,&newset,NULL); sleep(3); exit(0); } sleep(3); for(i=SIGRTMAX;i>=SIGRTMAX-2;i--) { for(j=0;j<=2;j++) { val.sival_int=j; Sigqueue(pid,i,val); printf("sent signal %d, val= %d\n",i,j); } } exit(0); }