About the kse signal process

xiong jinshan xiongjinshan at yahoo.com
Mon Jun 30 08:46:20 PDT 2003


--- Daniel Eischen <eischen at vigrid.com> wrote:
> On Mon, 30 Jun 2003, xiong jinshan wrote:
> 
> > Hi,
> >   I am wondering that the following piece of code
> > can't work with the unix semantics. I tested it
> with
> > 5.1 release and i386 arch. By unix sementics, if I
> > send the SIGALRM to this running programme, it
> should
> > be received by the thr_func() only, and print a
> prompt
> > msg on the console.
> 
> Yes, only thr_func() should receive the alarm.
This is the issue. Nothing printed on the console when
I sent the signal SIGALRM, it meant that none of the
thread received this signal.

> 
> > 
> > Reguards,
> > JinShan
> > 
> > Ps: c code:
> > 
> > /* vi: set ts=4 sw=4 expandtab: */
> > #include <stdio.h>
> > #include <signal.h>
> > #include <pthread.h>
> > 
> > void sigalrm_handler(int signo)
> > {
> >     if(signo != SIGALRM)
> >         abort();
> > 
> >     printf("Received sig alarm!\n");
> >     return;
> > }
> > 
> > void thr_func(void)
> > {
> >     sigset_t mask;
> >     struct sigaction sa;
> > 
> >     sigemptyset(&mask);
> >     sigaddset(&mask, SIGALRM);
> >     pthread_sigmask(SIG_UNBLOCK, &mask, NULL);
> > 
> >     memset(&sa, 0, sizeof(struct sigaction));
> >     sa.sa_handler = sigalrm_handler;
> >     sigaction(SIGALRM, &sa, NULL);
> > 
> >     while(1);
> > }
> > 
> > main()
> > {
> >     int err;
> >     pthread_t pth;
> >     sigset_t mask;
> > 
> >     sigfillset(&mask);
> >     sigprocmask(SIG_BLOCK, &mask, NULL);
> > 
> >     err = pthread_create(&pth, NULL, thr_func,
> NULL);
> >     if(err < 0) {
> >         perror("pthread_create!\n");
> >         return -1;
> >     }
> > 
> >     while(1);
> 
> -- 
> Dan Eischen
> 


__________________________________
Do you Yahoo!?
SBC Yahoo! DSL - Now only $29.95 per month!
http://sbc.yahoo.com


More information about the freebsd-threads mailing list