随笔-1  评论-0  文章-0  trackbacks-0

#include
<stdio.h> #include <stdlib.h> #include <string.h> #include <signal.h> #include <errno.h> #include <pthread.h> #include <unistd.h> #include <sys/types.h> void sig_handler(int signum) { if(signum == SIGUSR1) printf("sigusr1\\n"); else if(signum == SIGUSR2) printf("sigusr2\\n"); else printf("Receive signale: %d\\n", signum); } void *sigmgr_thread(void *arg) { sigset_t waitset; int sig; int rc; pthread_t ppid = pthread_self(); pthread_detach(ppid); sigemptyset(&waitset); sigaddset(&waitset,SIGRTMIN); sigaddset(&waitset,SIGRTMIN+2); sigaddset(&waitset,SIGRTMAX); sigaddset(&waitset,SIGUSR1); sigaddset(&waitset,SIGUSR2); while(1) { rc = sigwait(&waitset, &sig); if(rc == 0) { sig_handler(sig); } else { printf("sigwaitinfo() return err: %d; %s\\n", errno, strerror(errno)); } } } int main(void) { sigset_t bset, oset; pid_t pid = getpid(); pthread_t ppid; sigemptyset(&bset); sigaddset(&bset, SIGRTMIN); sigaddset(&bset, SIGRTMIN+2); sigaddset(&bset, SIGRTMAX); sigaddset(&bset, SIGUSR1); sigaddset(&bset, SIGUSR2); if(pthread_sigmask(SIG_BLOCK, &bset, &oset) != 0) printf("set pthread_mask failed\\n"); kill(pid, SIGRTMAX); kill(pid, SIGRTMAX); kill(pid, SIGRTMIN+2); kill(pid, SIGRTMIN); kill(pid, SIGRTMIN+2); kill(pid, SIGRTMIN); kill(pid, SIGUSR2); kill(pid, SIGUSR2); kill(pid, SIGUSR1); kill(pid, SIGUSR1); pthread_create(&ppid, NULL, sigmgr_thread, NULL); sleep(10); exit(0); }
posted on 2010-03-16 22:53 coming 阅读(187) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航:   博客园   博客园最新博文   博问   管理