线程和信号
来源:互联网 发布:筒仓设计软件 编辑:程序博客网 时间:2024/06/05 00:19
#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_tbset, oset;
pid_tpid = getpid();
pthread_tppid;
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);
}
无可奈何花落去别大地回春
- 线程和信号
- 线程和信号处理
- 线程和信号
- 线程和信号
- 线程和信号
- 12.8线程和信号
- 线程和信号
- linux中的线程和信号
- 异步信号安全和线程安全
- 可重入、异步信号安全和线程安全
- 异步信号安全和线程安全
- APUE学习笔记(17)-线程和信号
- 异步信号安全和线程安全
- APUE学习笔记(17)-线程和信号
- 异步信号安全和线程安全
- 可重入、异步信号安全和线程安全 .
- 异步信号安全和线程安全
- linux应用线程和信号处理
- java枚举
- QT4 DESIGNER 初体验
- 敏捷开发与极限编程
- 在PowerBuilder中读取数据库的多行数据
- 微软会对 Windows Phone 7 收费吗?
- 线程和信号
- Java泛型
- amix the lucky stiff(vimrc)
- exe4j打包+Eclipse打包插件说明 GUI项目打包EXE文件的总结
- 有关strncpy,memcpy,memmove的比较
- tomcat和eclipse安装
- C#系列一
- VC++6.0 Debug模式与Release模式的区别
- Servlet/JSP学习笔记(2)-基础知识