- 论坛徽章:
- 0
|
下面是我写的3个程序关于signal和线程的。如果向他们发送kill SIGINT信号的话大家能不能不执行程序就说出结果呢?
- #include <pthread.h>
- #include <signal.h>
- #include <unistd.h>
- #include <stdio.h>
- #include <stdlib.h>
- void sigint(int signo);
- void * thr_fn(void *arg)
- {
- int err, signo;
- sigset_t mask,oldmask;
- for (;;)
- }
-
- void sigint(int signo){
- printf("We are in hadler\n");
- }
-
- int main(void)
- {
- int err;
- sigset_t oldmask;
- pthread_t tid;
- sigset_t mask;
- signal(SIGINT,sigit);
- sigemptyset(&mask);
- sigaddset(&mask, SIGINT);
- pthread_sigmask(SIG_BLOCK, &mask, &oldmask);
- err = pthread_create(&tid, NULL, thr_fn, 0);
- for(;;);
- }
复制代码
- #include <pthread.h>
- #include <signal.h>
- #include <unistd.h>
- #include <stdio.h>
- #include <stdlib.h>
- void sigint(int signo);
- void * thr_fn(void *arg)
- {
- int err, signo;
- sigset_t mask,oldmask;
- sigemptyset(&mask);
- sigaddset(&mask, SIGINT);
- pthread_sigmask(SIG_BLOCK, &mask, &oldmask);
- for (;;);
- }
- void sigint(int signo){
- printf("We are in hadler\n");
- }
-
- int main(void)
- {
- int err;
- sigset_t oldmask;
- pthread_t tid;
- sigset_t mask;
- signal(SIGINT,sigint);
- pthread_create(&tid, NULL, thr_fn, 0);
- for(;;);
- }
复制代码
- #include <pthread.h>
- #include <signal.h>
- #include <unistd.h>
- #include <stdio.h>
- #include <stdlib.h>
- void sigint(int signo);
- void * thr_fn(void *arg)
- {
- int err, signo;
-
- for (;;) {
- sigwait(&mask, &signo);
- switch (signo) {
- case SIGINT:
- printf("\ninterrupt\n");
- break;
- default:
- printf("unexpected signal %d\n", signo);
- exit(1);
- }
- }
- }
- void sigint(int signo){
- printf("We are in hadler\n");
- }
- int main(void)
- {
- int err;
- sigset_t oldmask;
- pthread_t tid;
- sigset_t mask;
- signal(SIGINT,sigint);
- sigemptyset(&mask);
- sigaddset(&mask, SIGINT);
- pthread_sigmask(SIG_BLOCK, &mask, &oldmask);
- pthread_create(&tid, NULL, thr_fn, 0);
- for(;;);
- }
复制代码
BTW:
这些都是平台无关的,所以只要posix兼容的都应改一样。
欢迎排砖。砖头是我提高的动力~~
^_^
[ 本帖最后由 nuclearweapon 于 2006-9-3 22:51 编辑 ] |
|