Chinaunix

标题: 3个程序题目关于signal和thread的 [打印本页]

作者: nuclearweapon    时间: 2006-09-03 22:10
标题: 3个程序题目关于signal和thread的
下面是我写的3个程序关于signal和线程的。如果向他们发送kill SIGINT信号的话大家能不能不执行程序就说出结果呢?


  1. #include <pthread.h>
  2. #include <signal.h>
  3. #include <unistd.h>
  4. #include <stdio.h>
  5. #include <stdlib.h>

  6. void sigint(int signo);
  7. void * thr_fn(void *arg)
  8. {
  9.     int err, signo;
  10.     sigset_t mask,oldmask;
  11.     for (;;)
  12. }                                                                                                                 
  13.                                                                                                                   
  14. void sigint(int signo){                                                                                                                                                                                                
  15.         printf("We are in hadler\n");
  16. }                                                                                                                 
  17.                                                                                                                   
  18. int main(void)
  19. {                                                                                                                 
  20.     int         err;
  21.     sigset_t    oldmask;
  22.     pthread_t   tid;
  23.     sigset_t    mask;
  24.     signal(SIGINT,sigit);
  25.     sigemptyset(&mask);
  26.     sigaddset(&mask, SIGINT);
  27.     pthread_sigmask(SIG_BLOCK, &mask, &oldmask);
  28.     err = pthread_create(&tid, NULL, thr_fn, 0);
  29.     for(;;);                                                                                                      
  30. }  
复制代码


  1. #include <pthread.h>
  2. #include <signal.h>
  3. #include <unistd.h>
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. void sigint(int signo);
  7. void * thr_fn(void *arg)
  8. {
  9.     int err, signo;
  10.     sigset_t mask,oldmask;
  11.     sigemptyset(&mask);
  12.     sigaddset(&mask, SIGINT);
  13.     pthread_sigmask(SIG_BLOCK, &mask, &oldmask);   
  14.         for (;;);
  15. }   

  16. void sigint(int signo){
  17.         printf("We are in hadler\n");
  18. }   
  19.    
  20. int main(void)
  21. {
  22.     int         err;
  23.     sigset_t    oldmask;
  24.     pthread_t   tid;
  25.     sigset_t    mask;
  26.     signal(SIGINT,sigint);
  27.     pthread_create(&tid, NULL, thr_fn, 0);
  28.     for(;;);                                                                                                      
  29. }
复制代码

  1. #include <pthread.h>
  2. #include <signal.h>
  3. #include <unistd.h>
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. void sigint(int signo);
  7. void * thr_fn(void *arg)
  8. {
  9.     int err, signo;

  10.     for (;;) {

  11.         sigwait(&mask, &signo);
  12.         switch (signo) {
  13.         case SIGINT:
  14.             printf("\ninterrupt\n");
  15.             break;
  16.         default:
  17.             printf("unexpected signal %d\n", signo);
  18.             exit(1);
  19.         }
  20.     }
  21. }

  22. void sigint(int signo){

  23.         printf("We are in hadler\n");
  24. }

  25. int main(void)
  26. {
  27.     int         err;
  28.     sigset_t    oldmask;
  29.     pthread_t   tid;
  30.     sigset_t    mask;
  31.     signal(SIGINT,sigint);
  32.     sigemptyset(&mask);
  33.    sigaddset(&mask, SIGINT);
  34.    pthread_sigmask(SIG_BLOCK, &mask, &oldmask);
  35.    pthread_create(&tid, NULL, thr_fn, 0);
  36.     for(;;);                                                                                                      
  37. }
复制代码

BTW:
这些都是平台无关的,所以只要posix兼容的都应改一样。

欢迎排砖。砖头是我提高的动力~~
^_^

[ 本帖最后由 nuclearweapon 于 2006-9-3 22:51 编辑 ]
作者: nuclearweapon    时间: 2006-09-03 22:23
受不了
怎么贴出来是这个样子。。。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2