设为首页 加入收藏

TOP

信号究竟发给谁(二)
2014-11-24 00:40:23 来源: 作者: 【 】 浏览:89
Tags:信号 究竟 发给
oid work();

void handler(int);

int main()
{
struct sigaction sa;
memset(&sa, 0, sizeof(sa));
sa.sa_handler = handler;
sa.sa_flags = SA_RESTART;
sigemptyset(&sa.sa_mask);
sigaction(SIGQUIT, &sa, 0);
pthread_t tid;
pthread_create(&tid, 0, work_thread, 0);

work();
return 0;
}

void handler(int s)
{
char buf[32];
snprintf(buf, sizeof(buf), "\n%ld recv signal", syscall(SYS_gettid));
psignal(s, buf);
}

void *work_thread(void *p)
{
/*struct sigaction sa;
memset(&sa, 0, sizeof(sa));
sa.sa_handler = handler;
sa.sa_flags = SA_RESTART;
sigemptyset(&sa.sa_mask);
sigaction(SIGINT, &sa, 0);*/

for(;;) {
fprintf(stderr, "I\'m Zuro %ld\n", syscall(SYS_gettid));
sleep(2);
raise(SIGQUIT);
}

return (void *)0;
}

void work()
{
for(;;) {
pause();
fprintf(stderr, "I\'m Zuro %ld\n", syscall(SYS_gettid));
}
}
===================================================
这次我在主线程注册SIGQUIT信号处理函数,而在另一个线程
调用raise(SIGQUIT)函数产生这个信号。注意实验1和实验3的
区别:实验1的SIGQUIT信号是由终端shell发送,而实验3的信号
是由进程本身的一个线程产生。实验表明:信号不是发送
给主线程,而是发送给产生SIGQUIT信号的线程。


综上所诉,如果信号是由本进程产生,那么信号发给产生这个信号
的线程;如果信号是由其他进程产生,则信号发送给主线程。


摘自 leeshuheng的专栏
首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇深入理解C语言的指针*和引用& 下一篇C语言:rsa算法原理

评论

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