设为首页 加入收藏

TOP

Linux C语言:开启一个专门用来接收信号的子线程
2014-11-24 08:32:25 来源: 作者: 【 】 浏览:1
Tags:Linux 语言 开启 一个 专门 用来 接收 信号 线程

Linux C语言:开启一个专门用来接收信号的子线程。


以下这个小程序实现这个功能。


上代码:


#include
#include
#include
#include
#include
#include


//程序发生了严重的错误,输出
void error_quit(const char *str)
{
fprintf(stderr, "%s\n", str);
exit(1);
}


//专门用于接收信号的线程函数
static void *sig_thread(void *arg)
{
printf("subthread tid: %u\n", (unsigned int)pthread_self());
sigset_t *set = (sigset_t *) arg;
int res, sig;


while( 1 )
{
//挂起程序,等待信号的到来
res = sigwait(set, &sig);
if( res != 0 )
error_quit("sigwait error");
printf("tid: %u ", (unsigned int)pthread_self());

if( SIGALRM == sig )
{
printf("time out\n");
//循环设置闹钟信号,每5秒响一次
alarm(5);
}
else if( SIGTSTP == sig )
{
printf("catch quit signal\n");
break;
}
else if( SIGINT == sig )
{
printf("quit program\n");
exit(0);
}
}
}


int main(int argc, char *argv[])
{
pthread_t stid;
sigset_t set;
int res;
printf("main pid: %u, tid: %u\n",
(unsigned int)getpid(),
(unsigned int)pthread_self());


//设置要被线程处理的信号集
sigemptyset(&set);
sigaddset(&set, SIGINT);
sigaddset(&set, SIGTSTP);
sigaddset(&set, SIGALRM);
res = pthread_sigmask(SIG_BLOCK, &set, NULL);
if( res != 0 )
error_quit("pthread sigmask error");


alarm(1);
//开启信号处理线程,并让主线程等待其退出后才退出
res = pthread_create(&stid, NULL, &sig_thread, (void *) &set);
if (res != 0)
error_quit("pthread_create error");
pthread_join(stid, NULL);
printf("finish\n");


return 0;
}


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇用C语言将文件内容读入数组 下一篇Linux下用C语言来模拟密码输入

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·定义一个类模板并实 (2025-12-27 06:52:28)
·一文搞懂怎么用C语言 (2025-12-27 06:52:25)
·常用C模板范文_百度 (2025-12-27 06:52:21)
·【C语言】动态内存管 (2025-12-27 06:23:20)
·C语言中的内存管理 - (2025-12-27 06:23:16)