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

pthread_cond_signal() 没有给信号线程足够的时间运行

C代码pthread信号量程序,有3个线程按顺序打印

pthread_cancel 相关