Chinaunix

标题: 紧急求救 [打印本页]

作者: Jass    时间: 2007-12-25 21:59
标题: 紧急求救
一个服务器程序,在gcc3.4.3下编译,运行完全OK
在gcc3.4.4下编译,一运行会跑出三个进程来,一个父,一个子,一个孙,行为倒是没问题。这个诡异现象谁能帮搞定??

[ 本帖最后由 Jass 于 2007-12-25 22:06 编辑 ]
作者: 熏红猴    时间: 2007-12-25 21:59
好像以前的c lib是叫做libc4,libc5的
那个我贴的就是没有问题的
作者: scutan    时间: 2007-12-25 22:08
贴一下你fork时的代码.
另外在你fork了子进程之后马上打印一下当前子进程的进程号, 根据进程号判断一下可能的情况.
作者: Jass    时间: 2007-12-25 22:13
原帖由 scutan 于 2007-12-25 22:08 发表
贴一下你fork时的代码.
另外在你fork了子进程之后马上打印一下当前子进程的进程号, 根据进程号判断一下可能的情况.


我根本没fork。我只有一个进程。但是一运行ps就是三个,父、子、孙。同样代码,在gcc3.4.3下跑就没事
作者: achlice    时间: 2007-12-26 11:04
本没fork。我只有一个进程。但是一运行ps就是三个


  能贴 下   ps 的结果吗?                 或是 贴一下 pstree 的结果~

    3.4.3     ,  3.4.4  的 最好都 贴出来~~
作者: converse    时间: 2007-12-26 11:07
程序不会出错,出错的一定是人.
作者: 熏红猴    时间: 2007-12-26 11:27
旧的linuxthreads线程库会出现这种情况。
如果是多线程程序的话。
主线程是进程的儿子,新线程是主线程的儿子,线程也是进程。

[ 本帖最后由 熏红猴 于 2007-12-26 11:30 编辑 ]
作者: lihualoveyou    时间: 2007-12-26 12:42
帮顶一下
建议LZ把相关信息说明一下。一句话很难找出原因的
作者: Jass    时间: 2007-12-26 13:12
原帖由 熏红猴 于 2007-12-26 11:27 发表
旧的linuxthreads线程库会出现这种情况。
如果是多线程程序的话。
主线程是进程的儿子,新线程是主线程的儿子,线程也是进程。



请大侠再明示一下:的确是开了两个线程,加上主线程一共是三个。大侠的意思是那两个子进程其实都是thread,跟编译器的版本无关?这种现象要紧不要紧,怎么能够解决??
作者: 熏红猴    时间: 2007-12-26 13:16
标题: 回复 #8 Jass 的帖子
我也不懂,也是才碰到,可能跟编译器的编译选项有关吧,gcc -v输出什么?
还有,用的什么c库?
作者: Jass    时间: 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 编辑 ]
作者: 熏红猴    时间: 2007-12-26 13:37
什么环境下运行的?
用的什么C库?
作者: Jass    时间: 2007-12-26 13:41
原帖由 熏红猴 于 2007-12-26 13:37 发表
什么环境下运行的?
用的什么C库?


怎样能查看C库?
作者: 熏红猴    时间: 2007-12-26 13:51
是glibc吗?

运行/lib/libc.so.6
作者: Jass    时间: 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>.


请指教,说明什么?
作者: 熏红猴    时间: 2007-12-26 13:58
那应该是的,linuxthreads是把线程当进程的。
不过,redhat9已经支持nptl了。

  1. /lib/libc.so.6
  2. GNU C Library stable release version 2.5, by Roland McGrath et al.
  3. Copyright (C) 2006 Free Software Foundation, Inc.
  4. This is free software; see the source for copying conditions.
  5. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
  6. PARTICULAR PURPOSE.
  7. Compiled by GNU CC version 4.1.1 20060928 (Red Hat 4.1.1-28).
  8. Compiled on a Linux 2.6.9 system on 2006-10-08.
  9. Available extensions:
  10.         The C stubs add-on version 2.1.2.
  11.         crypt add-on version 2.1 by Michael Glad and others
  12.         GNU Libidn by Simon Josefsson
  13.         GNU libio by Per Bothner
  14.         NIS(YP)/NIS+ NSS modules 0.19 by Thorsten Kukuk

  15.         Native POSIX Threads Library by Ulrich Drepper et al  //这里表示用的nptl线程库

  16.         BIND-8.2.3-T5B
  17.         RT using linux kernel aio
  18. Thread-local storage support included.
  19. For bug reporting instructions, please see:
复制代码

[ 本帖最后由 熏红猴 于 2007-12-26 14:00 编辑 ]
作者: Jass    时间: 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 编辑 ]
作者: 熏红猴    时间: 2007-12-26 14:15
嗯,这个我就不知道了,pc机上还用linuxthreads应该已经很少了。
作者: Jass    时间: 2007-12-26 14:18
原帖由 熏红猴 于 2007-12-26 14:15 发表
嗯,这个我就不知道了,pc机上还用linuxthreads应该已经很少了。


好,那借问一下,能不能把没有问题的/lib/libc.so.6的结果贴出来看一下呢?
还有一个问题不明白:libc.so.6的6代表版本了,为什么版本都是6,结果会不一样呢?
作者: Jass    时间: 2007-12-26 14:23
原帖由 熏红猴 于 2007-12-26 14:21 发表
好像以前的c lib是叫做libc4,libc5的
那个我贴的就是没有问题的


哦,我没细看。多谢了。送分了。多谢指点!




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2