免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6713 | 回复: 5
打印 上一主题 下一主题

linux c 下 pthread_kill 的的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-01-02 22:00 |只看该作者 |倒序浏览
用pthread_kill 给一个不存在的线程会导致SIGSEGV?
哪个高手给出个说法?

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread -1219392624 (LWP 574]
0x00617f2f in pthread_kill () from /lib/libpthread.so.0
(gdb) bt
#0  0x00617f2f in pthread_kill () from /lib/libpthread.so.0
#1  0x08049c13 in do_epoll () at function.c:201
#2  0x006132db in start_thread () from /lib/libpthread.so.0
#3  0x0056d12e in clone () from /lib/libc.so.6
(gdb) disa pthread_kill
warning: bad breakpoint number at or near 'pthread_kill'
(gdb) disas pthread_kill
Dump of assembler code for function pthread_kill:
0x00617f20 <pthread_kill+0>:    push   %ebp
0x00617f21 <pthread_kill+1>:    mov    %esp,%ebp
0x00617f23 <pthread_kill+3>:    mov    0x8(%ebp),%eax
0x00617f26 <pthread_kill+6>:    push   %edi
0x00617f27 <pthread_kill+7>:    mov    0xc(%ebp),%edx
0x00617f2a <pthread_kill+10>:   mov    $0x3,%edi
0x00617f2f <pthread_kill+15>:   mov    0x48(%eax),%ecx
0x00617f32 <pthread_kill+18>:   test   %ecx,%ecx
0x00617f34 <pthread_kill+20>:   jle    0x617f67 <pthread_kill+71>
0x00617f36 <pthread_kill+22>:   lea    0xffffffe0(%edx),%eax
0x00617f39 <pthread_kill+25>:   mov    $0x16,%di
0x00617f3d <pthread_kill+29>:   cmp    $0x1,%eax
0x00617f40 <pthread_kill+32>:   jbe    0x617f67 <pthread_kill+71>
0x00617f42 <pthread_kill+34>:   mov    %gs:0x4c,%edi
0x00617f49 <pthread_kill+41>:   xchg   %ebx,%edi
0x00617f4b <pthread_kill+43>:   mov    $0x10e,%eax
0x00617f50 <pthread_kill+48>:   call   *%gs:0x10
0x00617f57 <pthread_kill+55>:   xchg   %edi,%ebx
0x00617f59 <pthread_kill+57>:   mov    %eax,%edx
0x00617f5b <pthread_kill+59>:   xor    %edi,%edi
0x00617f5d <pthread_kill+61>:   neg    %edx
0x00617f5f <pthread_kill+63>:   cmp    $0xfffff000,%eax
0x00617f64 <pthread_kill+68>:   cmova  %edx,%edi
0x00617f67 <pthread_kill+71>:   mov    %edi,%eax
0x00617f69 <pthread_kill+73>:   pop    %edi
0x00617f6a <pthread_kill+74>:   pop    %ebp
0x00617f6b <pthread_kill+75>:   ret   
0x00617f6c <pthread_kill+76>:   nop   
0x00617f6d <pthread_kill+77>:   nop   
0x00617f6e <pthread_kill+78>:   nop   
0x00617f6f <pthread_kill+79>:   nop   
End of assembler dump.
(gdb) info f
Stack level 0, frame at 0xb75180c0:
eip = 0x617f2f in pthread_kill; saved eip 0x8049c13
called by frame at 0xb75183d0
Arglist at 0xb75180b8, args:
Locals at 0xb75180b8, Previous frame's sp is 0xb75180c0
Saved registers:
  ebp at 0xb75180b8, eip at 0xb75180bc


Dec 22 18:56:08 wqw-work [5746]: after do_deal pthread 2855287696
Dec 22 18:56:08 wqw-work [5746]: close pthread 2855287696
Dec 22 18:56:07 wqw-work [5746]: socket 34 address 2855287696 events 0
目标线程在调用pthread_kill的时候退出了

[ 本帖最后由 孙轩 于 2008-1-3 09:20 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2008-01-03 16:02 |只看该作者
yes,i find it,it's a bug of nptl 2.5

论坛徽章:
0
3 [报告]
发表于 2008-01-03 16:21 |只看该作者
晕,在nptl的bug列表里,开发者坚决否认这是bug http://www.cygwin.com/ml/glibc-bugs/2007-05/msg00066.html
那么在nptl中如何确认线程是否存在,难道要每次都要退出程序?

论坛徽章:
0
4 [报告]
发表于 2011-10-19 20:31 |只看该作者
不太看得懂,
pthread_kill的sig呢?

论坛徽章:
0
5 [报告]
发表于 2012-12-03 12:19 |只看该作者
你好!
      我也遇到你类似的问题:用pthread_kill 给一个不存在的线程会导致SIGSEGV.
      请问你是如何解决的?方便的话,qq联系:373661496

论坛徽章:
0
6 [报告]
发表于 2012-12-03 21:57 |只看该作者
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP