当前位置:  技术问答>linux和unix

pthread_create成功返回,但pthread_kill(thrdid, 0)返回说进程不存在?

    来源: 互联网  发布时间:2015-11-28

    本文导语:  HP-UX下,pthread_create成功返回,取得线程id,但pthread_kill(thrdid, 0)返回错误说进程不存在,这是怎么回事?我实在想不明白。我的代码片断: for(...;...;...) {   ....;     alarm(0);     ret = pthread_create(&thrID, NULL, ThreadF...

HP-UX下,pthread_create成功返回,取得线程id,但pthread_kill(thrdid, 0)返回错误说进程不存在,这是怎么回事?我实在想不明白。我的代码片断:
for(...;...;...)
{
  ....;
    alarm(0);
    ret = pthread_create(&thrID, NULL, ThreadFuncCalcV, (void *)thrParam);
printf("1 pthread_kill(%x, 0) : %dn", thrID, pthread_kill(thrID, 0));
    if(ret != 0)
      fprintf(stdout, "1pthread_create fail ret = %d[thrID:%x]n", ret, thrID);
printf("2 pthread_kill(%x, 0) : %dn", thrID, pthread_kill(thrID, 0));
    alarm(2);
printf("3 pthread_kill(%x, 0) : %dn", thrID, pthread_kill(thrID, 0));
    ret = pthread_join(thrID, NULL);
printf("4 pthread_kill(%x, 0) : %dn", thrID, pthread_kill(thrID, 0));
    if(ret != 0)
      fprintf(stdout, "2pthread_join fail ret = %d[thrID:%x]n", ret,thrID);
printf("5 pthread_kill(%x, 0) : %dn", thrID, pthread_kill(thrID, 0));
    alarm(0);
printf("6 pthread_kill(%x, 0) : %dn", thrID, pthread_kill(thrID, 0));
    ret = pthread_detach(thrID);
printf("7 pthread_kill(%x, 0) : %dn", thrID, pthread_kill(thrID, 0));
    if(ret != 0)
      fprintf(stdout, "3pthread_detach fail ret = %d[thrID:%x]n", ret,thrID);
printf("8 pthread_kill(%x, 0) : %dn", thrID, pthread_kill(thrID, 0));
  ....;
}


输出结果:


HP-UX@/home/src $ optd
1 pthread_kill(2, 0) : 0
2 pthread_kill(2, 0) : 0
3 pthread_kill(2, 0) : 0
4 pthread_kill(2, 0) : 3
5 pthread_kill(2, 0) : 3
6 pthread_kill(2, 0) : 3
7 pthread_kill(2, 0) : 3
3pthread_detach fail ret = 3[thrID:2]
8 pthread_kill(2, 0) : 3
1 pthread_kill(3, 0) : 3
2 pthread_kill(3, 0) : 3
3 pthread_kill(3, 0) : 3
4 pthread_kill(3, 0) : 3
5 pthread_kill(3, 0) : 3
6 pthread_kill(3, 0) : 3
7 pthread_kill(3, 0) : 3
3pthread_detach fail ret = 3[thrID:3]
8 pthread_kill(3, 0) : 3
1 pthread_kill(4, 0) : 3
2 pthread_kill(4, 0) : 3
3 pthread_kill(4, 0) : 3
4 pthread_kill(4, 0) : 3
5 pthread_kill(4, 0) : 3
6 pthread_kill(4, 0) : 3
7 pthread_kill(4, 0) : 3
3pthread_detach fail ret = 3[thrID:4]
8 pthread_kill(4, 0) : 3
1 pthread_kill(5, 0) : 3
2 pthread_kill(5, 0) : 3
3 pthread_kill(5, 0) : 3
4 pthread_kill(5, 0) : 3
5 pthread_kill(5, 0) : 3
6 pthread_kill(5, 0) : 3
7 pthread_kill(5, 0) : 3
3pthread_detach fail ret = 3[thrID:5]
8 pthread_kill(5, 0) : 3
1 pthread_kill(6, 0) : 3
2 pthread_kill(6, 0) : 3
3 pthread_kill(6, 0) : 3
4 pthread_kill(6, 0) : 3
5 pthread_kill(6, 0) : 3
6 pthread_kill(6, 0) : 3
7 pthread_kill(6, 0) : 3
3pthread_detach fail ret = 3[thrID:6]
8 pthread_kill(6, 0) : 3
1 pthread_kill(7, 0) : 0
2 pthread_kill(7, 0) : 0
3 pthread_kill(7, 0) : 0

|
在pthread_join调用返回时,线程就已结束啦。
你将测试代码贴出来,大家帮你分析分析原因。

|
是不是线程已经结束运行退出了,ThreadFuncCalcV的内容是什么?

|
在pthread_join调用返回时,线程就已结束了吧?

|
在多线程编程中象你这么使用alarm()实在不是一个好主意,因为你不能确定SIGALARM信号究竟会发给谁,很有可能你创建的线程已经被该信号终止了。另外pthread_join()会一直等待指定的线程结束,因此之后再对此线程有任何操作都是无意义的。

    
 
 

您可能感兴趣的文章:

  • pthread_create函数返回值问题
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 包含了#include <pthread.h>,为什么还有pthread_create错误? iis7站长之家
  • Linux里的pthread_create会不会阻塞啊?
  • 关于pthread_create函数的问题
  • pthread_create的问题
  • pthread_create函数执行问题
  • 为什么pthread_create`编译通不过
  • 包含了#include <pthread.h>,为什么还有pthread_create错误?
  • 无法使用pthread_creat()函数的问题
  • 请问:linux下如何将一个类的指针作为参数传给pthread_create创建的线程?
  • 有关使用pthread_creat时的参数传递问题!!!
  • pthread_create 的问题 ,求救大家!!!
  • linux下进程和线程的区别(fork(),pthread_create())?
  • pthread_create函数编译时报错?
  • REDHAT7.2提示:undefined reference to "pthread_create"
  • 请问:为什么我在守护进程里面用pthread_create来启动线程,经常会卡在那里阿?
  • pthread_create 为何报 Segmentation fault?
  • pthread_create编译错误
  • ★pthread_create 与 thr_create的区别是什么?★
  • 求助!!undefined reference to 'pthread_create'
  • pthread_create创建线程问题


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3