Linux异步信号
2015-11-02 17:01
549 查看
Linux异步信号
1.int pthread_kill(pthread_t threadid, intsigno);
向特定的线程发送信号signo
2.int pthread_sigmask(int how, const sigset_t*newmask, sigset_t *oldmask);
设置线程的信号屏蔽码
3.int sigwait(const sigset_t *set, int *sig);
阻塞线程,等待set中指定的信号之一到达,并将到达的信号存入*sig。
4.代码
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <signal.h>
//#define SIGUSRR 40;
int SIGUSRR = 40;
void* threadOne(void *arg)
{
sigset_tsigset;
intsigno;
sigemptyset(&sigset);
sigaddset(&sigset,SIGUSRR);
pthread_sigmask(SIG_BLOCK,&sigset, NULL);
while(1)
{
sigwait(&sigset,&signo);
printf("getthread cond sig!\n");
}
}
int main(int argc, char **argv)
{
if(argc != 1)
{
printf("Usage:\n");
printf("threadcond\n");
return1;
}
pthread_tthreadId;
if(pthread_create(&threadId,NULL, threadOne, NULL) != 0)
{
printf("threadcreate error! \n");
return1;
}
//structsigaction act;
//act.sa_handler=SIG_IGN;
//sigemptyset(&act.sa_mask);
//act.sa_flags=0;
//sigaction(SIGUSRR,&act,0);//设置信号SIGUSR1的处理方式忽略
usleep(1000000);
pthread_kill(threadId,SIGUSRR);
usleep(1000000);
pthread_kill(threadId,SIGUSRR);
usleep(2000000);
return0;
}
1.int pthread_kill(pthread_t threadid, intsigno);
向特定的线程发送信号signo
2.int pthread_sigmask(int how, const sigset_t*newmask, sigset_t *oldmask);
设置线程的信号屏蔽码
3.int sigwait(const sigset_t *set, int *sig);
阻塞线程,等待set中指定的信号之一到达,并将到达的信号存入*sig。
4.代码
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <signal.h>
//#define SIGUSRR 40;
int SIGUSRR = 40;
void* threadOne(void *arg)
{
sigset_tsigset;
intsigno;
sigemptyset(&sigset);
sigaddset(&sigset,SIGUSRR);
pthread_sigmask(SIG_BLOCK,&sigset, NULL);
while(1)
{
sigwait(&sigset,&signo);
printf("getthread cond sig!\n");
}
}
int main(int argc, char **argv)
{
if(argc != 1)
{
printf("Usage:\n");
printf("threadcond\n");
return1;
}
pthread_tthreadId;
if(pthread_create(&threadId,NULL, threadOne, NULL) != 0)
{
printf("threadcreate error! \n");
return1;
}
//structsigaction act;
//act.sa_handler=SIG_IGN;
//sigemptyset(&act.sa_mask);
//act.sa_flags=0;
//sigaction(SIGUSRR,&act,0);//设置信号SIGUSR1的处理方式忽略
usleep(1000000);
pthread_kill(threadId,SIGUSRR);
usleep(1000000);
pthread_kill(threadId,SIGUSRR);
usleep(2000000);
return0;
}
相关文章推荐
- linux系统编程杂记
- Linux(Centos)配置PHP运行环境
- Linux安装H2数据库,并作为后台服务运行
- Linux内核驱动之延时
- Linux(Centos)端口操作
- linux 不同版本配置VNC
- linux下安装MYSQL错误:conflicts with file from package mysql-libs-*的解决方法
- linux基础---管道和I/O重定向
- linux终端版学生信息管理系统【C语言实现】
- 每天一个linux命令系列:linux chmod命令
- Linux 下常用解压命令(转载)
- Linux(Centos)下条件查找执行
- Linux内核模块编写详解
- Git 服务器搭建(Linux)
- linux学习之命令参数解析——getopt()函数
- 关于Linux下ImportError: No module named msvcrt
- 【Linux】 Linux常用命令大全
- CentOS6.5环境下布署LVS+keepalived
- Cannot retrieve repository metadata (repomd.xml)
- linux dns正反向解析配置