pthread中向线程发送信号
Posted tianzeng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pthread中向线程发送信号相关的知识,希望对你有一定的参考价值。
pthread_kill 语法
int pthread_kill(thread_t tid, int sig);
#include <pthread.h> #include <signal.h> int sig; pthread_t tid; int ret; ret = pthread_kill(tid, sig);
pthread_kill() 将信号 sig 发送到由 tid 指定的线程。tid 所指定的线程必须与调用线程在同一个进程中。sig 参数必须来自 signal(5) 提供的列表。
向指定ID的线程发送sig信号如果线程代码内不做处理,则按照信号默认的行为影响整个进程,也就是说,如果你给一个线程发送了SIGQUIT,但线程却没有实现signal处理函数,则整个进程退出。
pthread_kill(threadid, SIGKILL)也一样,杀死整个进程。
如果要获得正确的行为,就需要在线程内实现signal(SIGKILL,sig_handler)了。
所以,如果int sig的参数不是0,那一定要清楚到底要干什么,而且一定要实现线程的信号处理函数,否则,就会影响整个进程。
OK,如果int sig是0呢,这是一个保留信号,一个作用是用来判断线程是不是还活着(将执行错误检查,但并不实际发送信号。此错误检查可用来检查 tid 的有效性。)。
pthread_kill 返回值
pthread_kill() 在成功完成之后返回零。其他任何返回值都表示出现了错误。如果出现以下任一情况,pthread_kill() 将失败并返回相应的值。
EINVAL
描述:
sig 是无效的信号量。
ESRCH
描述:
当前的进程中找不到 tid。
以上是关于pthread中向线程发送信号的主要内容,如果未能解决你的问题,请参考以下文章
在信号句柄中使用 pthread_cond_wait 的 Pthread 被阻塞
Unix系统编程()发送信号的其他方式:raise和killpg