免费注册 查看新帖 |

Chinaunix

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

紧急求救 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-12-25 21:59 |显示全部楼层 |倒序浏览
20可用积分
一个服务器程序,在gcc3.4.3下编译,运行完全OK
在gcc3.4.4下编译,一运行会跑出三个进程来,一个父,一个子,一个孙,行为倒是没问题。这个诡异现象谁能帮搞定??

[ 本帖最后由 Jass 于 2007-12-25 22:06 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2007-12-25 22:13 |显示全部楼层
原帖由 scutan 于 2007-12-25 22:08 发表
贴一下你fork时的代码.
另外在你fork了子进程之后马上打印一下当前子进程的进程号, 根据进程号判断一下可能的情况.


我根本没fork。我只有一个进程。但是一运行ps就是三个,父、子、孙。同样代码,在gcc3.4.3下跑就没事

论坛徽章:
0
3 [报告]
发表于 2007-12-26 13:12 |显示全部楼层
原帖由 熏红猴 于 2007-12-26 11:27 发表
旧的linuxthreads线程库会出现这种情况。
如果是多线程程序的话。
主线程是进程的儿子,新线程是主线程的儿子,线程也是进程。



请大侠再明示一下:的确是开了两个线程,加上主线程一共是三个。大侠的意思是那两个子进程其实都是thread,跟编译器的版本无关?这种现象要紧不要紧,怎么能够解决??

论坛徽章:
0
4 [报告]
发表于 2007-12-26 13:29 |显示全部楼层
原帖由 熏红猴 于 2007-12-26 13:16 发表
我也不懂,也是才碰到,可能跟编译器的编译选项有关吧,gcc -v输出什么?
还有,用的什么c库?

[root@as4-oracle ~]# gcc -v
Reading specs from /usr/lib/gcc-lib/i386-redhat-linux/3.2.3/specs
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --disable-checking --with-system-zlib --enable-__cxa_atexit --enable-languages=c,c++ --disable-libgcj --host=i386-redhat-linux
Thread model: posix
gcc version 3.2.3 20030502 (Red Hat Linux 3.2.3-47.3)





[root@as4-oracle ~]# g++ -v
Reading specs from /usr/lib/gcc-lib/i386-redhat-linux/3.2.3/specs
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --disable-checking --with-system-zlib --enable-__cxa_atexit --enable-languages=c,c++ --disable-libgcj --host=i386-redhat-linux
Thread model: posix
gcc version 3.2.3 20030502 (Red Hat Linux 3.2.3-47.3)
g++32: no input files



实际编译用的是g++

[ 本帖最后由 Jass 于 2007-12-26 13:31 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2007-12-26 13:41 |显示全部楼层
原帖由 熏红猴 于 2007-12-26 13:37 发表
什么环境下运行的?
用的什么C库?


怎样能查看C库?

论坛徽章:
0
6 [报告]
发表于 2007-12-26 13:53 |显示全部楼层
原帖由 熏红猴 于 2007-12-26 13:51 发表
是glibc吗?

运行/lib/libc.so.6

[root@as4-oracle ~]# /lib/libc.so.6
GNU C Library stable release version 2.3.4, by Roland McGrath et al.
Copyright (C) 2005 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
Compiled by GNU CC version 3.4.4 20050721 (Red Hat 3.4.4-2).
Compiled on a Linux 2.4.20 system on 2005-08-19.
Available extensions:
        GNU libio by Per Bothner
        crypt add-on version 2.1 by Michael Glad and others
        linuxthreads-0.10 by Xavier Leroy
        The C stubs add-on version 2.1.2.
        BIND-8.2.3-T5B
        NIS(YP)/NIS+ NSS modules 0.19 by Thorsten Kukuk
        Glibc-2.0 compatibility add-on by Cristian Gafton
        GNU Libidn by Simon Josefsson
        libthread_db work sponsored by Alpha Processor Inc
Thread-local storage support included.
For bug reporting instructions, please see:
<http://www.gnu.org/software/libc/bugs.html>.


请指教,说明什么?

论坛徽章:
0
7 [报告]
发表于 2007-12-26 14:11 |显示全部楼层
原帖由 熏红猴 于 2007-12-26 13:58 发表
那应该是的,linuxthreads是把线程当进程的。
不过,redhat9已经支持nptl了。

/lib/libc.so.6
GNU C Library stable release version 2.5, by Roland McGrath et al.
Copyright (C) 2006 Free Software F ...


你是说这句?:
linuxthreads-0.10 by Xavier Leroy

但是运行正常的机器的/lib/libc.so.6也是这一句呀。要怎样才能不把线程当进程呢?

[ 本帖最后由 Jass 于 2007-12-26 14:13 编辑 ]

论坛徽章:
0
8 [报告]
发表于 2007-12-26 14:18 |显示全部楼层
原帖由 熏红猴 于 2007-12-26 14:15 发表
嗯,这个我就不知道了,pc机上还用linuxthreads应该已经很少了。


好,那借问一下,能不能把没有问题的/lib/libc.so.6的结果贴出来看一下呢?
还有一个问题不明白:libc.so.6的6代表版本了,为什么版本都是6,结果会不一样呢?

论坛徽章:
0
9 [报告]
发表于 2007-12-26 14:23 |显示全部楼层
原帖由 熏红猴 于 2007-12-26 14:21 发表
好像以前的c lib是叫做libc4,libc5的
那个我贴的就是没有问题的


哦,我没细看。多谢了。送分了。多谢指点!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP