什么网站可以在家做美工兼职,为什么做网站能赚钱,移动端关键词排名如何优化,建设网站一般要多久到账一、该函数其实不是kill线程#xff0c;而是向线程发送一个signal#xff0c;pthread_kill()函数的作用是向某个线程传递一个信号#xff0c;创建的线程中signal(SIGKILL,sig_handler)函数去处理对应的信号#xff0c;如果你给一个线程发送了SIGQUIT、SIGKILL#xff0c;但…
一、该函数其实不是kill线程而是向线程发送一个signalpthread_kill()函数的作用是向某个线程传递一个信号创建的线程中signal(SIGKILL,sig_handler)函数去处理对应的信号如果你给一个线程发送了SIGQUIT、SIGKILL但线程却没有实现signal处理函数则整个进程退出如果线程里面有处理signal 则不会退出。
二、pthread_kill的返回值成功:0; 线程不存在ESRCH (3)信号不合法 EINVAL(22)。
三、判断线程是否存在 当我们给线程发送一个0就可以判断线程是否存在pthread_kill(tid, 0);这是一个保留信号一个作用是用来判断线程是不是还活着。
四、测试C代码
#include stdio.h
#include stdlib.h
#include string.h
#include stdint.h
#include pthread.h
#include stdio.h
#include signal.h
#include errno.h int exit_flag 0;void sighandler(int signum)
{printf(capture signal number %d...\n, signum);if(SIGKILL signum)exit(1);
}void *threadfunc(void *parm)
{int i 0;signal(SIGQUIT, sighandler);while(1){printf(threadfunc i%d\n,i);sleep(1);if(exit_flag)break;}printf(exit from hreadfunc\n);return NULL;
}void main()
{int rc 0;pthread_t threads;rc pthread_kill(threads, 0);printf(ESRCH%d EINVAL%d\n,ESRCH,EINVAL); printf(start rc%d\n,rc);pthread_create(threads, NULL, threadfunc, NULL);sleep(1);rc pthread_kill(threads, 0);printf(pthread_kill(threads, 0) rc%d\n,rc);sleep(5);rc pthread_kill(threads, SIGQUIT);sleep(1);printf(after SIGQUIT rc%d\n,rc);exit_flag 1;sleep(3);rc pthread_kill(threads, 0);printf(after set exit_flag 1 rc%d\n,rc);rc pthread_kill(threads, SIGKILL);sleep(1);printf(after SIGKILL rc%d\n,rc); while(1);return ;
} 五、参考文章
linux中pthread_kill函数详解-CSDN博客
第六章_信号 : signal函数--信号-CSDN博客
https://www.cnblogs.com/bigben0123/p/3184094.html
判断线程是否存活——pthread_kill函数-CSDN博客
线程的信号pthread_kill()函数线程四-CSDN博客