pthread_kill没有杀死线程C linux

时间:2012-02-18 23:41:29

标签: c linux multithreading pthreads

我正在制作一个小项目,该项目将被纳入更大的项目。它的作用基本上是跟踪通过将它们添加到主结构而创建的线程,主结构跟踪线程的作用(主要功能)和pthread_t id。另一个struct跟踪要传递给函数的数据以及pthread_t id存储在threads []中的元素号。它有点micky鼠标,它跳了一下但是除了什么时候杀死线程之外它都有效。我得到没有段错误和没有错误,程序完成得很好,但是当调用pthread_kill()时,线程不会被杀死(函数返回0表示没有错误并且它有效)尽管线程继续运行直到主应用程序返回。

2 个答案:

答案 0 :(得分:5)

pthread_kill()不会杀死一个帖子。与kill()的唯一区别在于信号由指定的线程处理,而在该线程屏蔽信号时不处理(参见pthread_sigmask())。默认情况下,SIGTERM之类的信号将终止整个过程。

如果您考虑从信号处理程序中调用pthread_exit(),则应该使用pthread_cancel()代替。

如果所有可能被取消的代码都合作(或者调用它的代码禁用了当时的取消),则取消是安全的。不过,大多数图书馆并不关心这一点。

更安全的方法是让线程在没有任何强制的情况下退出,例如向其发送特殊消息(如果线程正常处理消息)。

或者,不要费心去杀任何线程,只需拨打_exit()_Exit()quick_exit()

答案 1 :(得分:4)

来自http://pubs.opengroup.org/onlinepubs/7908799/xsh/pthread_kill.html

  

与kill()一样,如果sig为零,则执行错误检查但实际上没有发送信号。

以下

  

pthread_kill(threads [i] .tID,0);

实际上不会杀死线程。你需要使用一个实际的信号来杀死一个线程。可在此处找到信号列表:

http://pubs.opengroup.org/onlinepubs/7908799/xsh/signal.h.html