Pthread学习笔记(2)

Pthread学习笔记(2)

pthread_kill函数

  函数原型如下:

int pthread_kill(pthread_t thread, int sig);

  该函数与kill函数类似,但是该函数用于向某个线程发送函数。
  如下程序,主线程向子线程发送15信号,也就是SIGTERM信号,该信号如果不设置捕获(处理函数)便会导致终止,那么该程序的结果便可以看出终止的是线程还是进程。

#include<pthread.h>
#include<stdio.h>
#include<signal.h>
#include<unistd.h>
pthread_t pt;
void *func(void* argv)
{
   
    printf("from func\n");
    for(int i=0;i<5;i++)
    {
   
        printf("func i=%d\n",i);
        sleep(1);
    }
}
int main()
{
   
    pthread_create(&pt,NULL,func,NULL);
    sleep(1);
    pthread_kill(pt,15);
    for(int i=0;i<5;i++)
    {
   
        printf("main i=%d\n",i);
        sleep(1);
    }
}

  程序的输出如下,可以看出当子线程收到了信号时这个进程直接终止了:

~$ ./demo3
from func
func i=0
func i=1
已终止

设置捕获函数,哪个线程处理?

在主线程中设置处理函数

  首先得说明不管在哪设置处理函数都是会修改进程PCB中对应信号的sigaction,不会存在主线程收到15信号的处理函数和子线程收到的处理函数不同(不过sigwait之类的函数倒是可以)。
  在main函数中设置捕获15信号时的处理函数为handle。

#include<pthread.h>
#include<stdio.h>
#include<signal.h>
#include<unistd.h>
pthread_t pt;
void handle(int sig)
{
   
    printf("receive signal:%d\n",sig);
    fo
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值