http://bbs.rosoo.net/thread-9772-1-1.html
pthread_kill:
别被名字吓到,pthread_kill可不是kill,而是向线程发送signal。还记得signal吗,大部分signal的默认动作是终止进程的运行,所以,我们才要用signal()去抓信号并加上处理函数。
int pthread_kill(pthread_t thread, int sig);
向指定ID的线程发送sig信号,如果线程代码内不做处理,则按照信号默认的行为影响整个进程,也就是说,如果你给一个线程发送了SIGQUIT,但线程却没有实现signal处理函数,则整个进程退出。
pthread_kill(threadid, SIGKILL)也一样,杀死整个进程。
如果要获得正确的行为,就需要在线程内实现signal(SIGKILL,sig_handler)了。
所以,如果int sig的参数不是0,那一定要清楚到底要干什么,而且一定要实现线程的信号处理函数,否则,就会影响整个进程。
OK,如果int sig是0呢,这是一个保留信号,一个作用是用来判断线程是不是还活着。
我们来看一下pthread_kill的返回值:
成功:0
线程不存在:ESRCH
信号不合法:EINVAL
所以,pthread_kill(threadid,0)就很有用啦。
int kill_rc = pthread_kill(thread_id,0);
if(kill_rc == ESRCH)
printf("the specified thread did not exists or already quit\n");
else if(kill_rc == EINVAL)
printf("signal is invalid\n");
else
printf("the specified thread is alive\n");
上述的代码就可以判断线程是不是还活着了。
|
vo
id
* func(vo
id
*arg) {
printf(Child
thread
!\n);
printf(
Thread
ID
is %ld\n, (unsigned long) p
thread
_self());
return 0;
int main(int argc, char const* argv[]) {
p
thread
_t
thread
Id
;
if(p
thread
_create(&
thread
Id
, NULL,func, NULL)
别被名字吓到,p
thread
_kill可不是kill,而是向
线程
发送signal。还记得signal吗,大部分signal的默认动作是
终止
进程的运行,所以,我们才要用signal()去抓信号并加上处理函数。
int p
thread
_kill(p
thread
_t
thread
, int sig);
向指定
ID
的
线程
发送sig信号,如果
线程
代码内不做处理,则按照信号默认的行为影响整个进程,也就是说...
原文地址:
下午实验编写了使用p
thread
_kill函数检测一个
线程
是否
还活着的程序,在linux环境下gcc编译通过,现将代码贴在下面:/******************************* p
thread
_kill.c *******************************/
/******************************* p
thread
_kill...
1.函数作用
1>p
thread
_kill()函数的作用是向某个
线程
传递一个信号
2>[注意]创建的
线程
中使用signal(SIGKILL,sig_handler)函数去处理对应的信号,如果你给一个
线程
发送了SIGQUIT,
但
线程
却没有实现signal处理函数,则整个进程退出
信号的设置:signal函数
2.函数原型
#include <p
thread
.h>
#include<signal.h>
int p
thread
_ki
int p
thread
_kill(
thread
_t t
id
, int sig)
将信号sig发送到由t
id
指定的
线程
,t
id
所指定的
线程
必须与调用
线程
在同一个进程中。如果sig为零,将执行错误
检查
,但并不实际发送信号。此错误
检查
可用来
检查
t
id
的有效性。
返回值 成功之后返回0,否则返回非零。
1#define _MULTI_
THREAD
ED
2 #include <p
thread
.h>
3 #include <stdio.h>
p
thread
_create()的帮助文档里面,明确指出,一个
线程
的
终止
有如下的四种方式:
* 本
线程
中调用p
thread
_exit(),同一进程里面调用p
thread
_join()的其他
线程
可以获取该
线程
的退出值。
* 本
线程
的
线程
函数start_routine执行
结束
返回。
* 本
线程
被p
thread
_cancel()取消。
* 本
线程
所在的
int p
thread
_kill(
thread
_t t
id
, int sig)
将信号sig发送到由t
id
指定的
线程
,t
id
所指定的
线程
必须与调用
线程
在同一个进程中。如果sig为零,将执行错误
检查
,但并不实际发送信号。此错误
检查
可用来
检查
t
id
的有效性。
返回值 成功之后返回0,否则返回非零。
1 #define _MULTI_
THREAD
ED
2 #in