主线程中创建一个子线程如代码:
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
#include <signal.h>
void sighandler(int signum)
{
printf("Pthread stop singal.\n");
pthread_exit(0);
}
void *test(void *arg)
{
signal(SIGALRM, sighandler);
while(1){
printf("111\n");
sleep(1);
}
}
int main()
{
pthread_t pth;
pthread_create(&pth, NULL, test, NULL);
pthread_detach(pth);
sleep(5);
int rc = pthread_kill(pth, SIGALRM);
printf("rc = %d\n",rc);
while(1);
}
想要杀死子线程,首先需要子线程detach主线程,这样子线程不被主线程控制,然后主线程启用kill信号,子线程接收到信号后做信号处理函数进行exit。
另一种方法是pthread_cancle(),具体使用方法进行了测试,在此不提供。