Chinaunix

标题: 单进程变成了多进程,百思不得其解? [打印本页]

作者: ljok30    时间: 2008-04-18 13:20
标题: 单进程变成了多进程,百思不得其解?
我在ES4.0上运行一个单进程的程序,用ps命令查看却出现很多个同名却不同PID的进程(我能确保我的程序是单进程,但是是多线程的程序),百思不得其解,盼回复!

具体的截图如下:
[starnvsm@Bs log]$ ps aux|grep bs
starnvsm 22654  0.0  1.4 116768 30964 pts/2  S+   Apr17   0:21 ./bs-test2
starnvsm 22655  0.0  1.4 116768 30964 pts/2  S+   Apr17   0:00 ./bs-test2
starnvsm 22656  0.0  1.4 116768 30964 pts/2  S+   Apr17   0:00 ./bs-test2
starnvsm 22658  0.0  1.4 116768 30964 pts/2  S+   Apr17   0:00 ./bs-test2
starnvsm 22659  0.0  1.4 116768 30964 pts/2  S+   Apr17   0:00 ./bs-test2
starnvsm 22660  0.0  1.4 116768 30964 pts/2  S+   Apr17   0:00 ./bs-test2
starnvsm 22661  0.0  1.4 116768 30964 pts/2  S+   Apr17   0:00 ./bs-test2
starnvsm 22662  0.0  1.4 116768 30964 pts/2  S+   Apr17   0:00 ./bs-test2
starnvsm 22663  0.0  1.4 116768 30964 pts/2  S+   Apr17   0:00 ./bs-test2
starnvsm 22664  0.0  1.4 116768 30964 pts/2  S+   Apr17   0:00 ./bs-test2
starnvsm 22665  0.0  1.4 116768 30964 pts/2  S+   Apr17   0:00 ./bs-test2
starnvsm 22666  0.0  1.4 116768 30964 pts/2  S+   Apr17   0:00 ./bs-test2
starnvsm 22667  0.0  1.4 116768 30964 pts/2  S+   Apr17   0:00 ./bs-test2
starnvsm 22668  0.0  1.4 116768 30964 pts/2  S+   Apr17   0:00 ./bs-test2
starnvsm 22669  0.0  1.4 116768 30964 pts/2  S+   Apr17   0:00 ./bs-test2
starnvsm 22670  0.0  1.4 116768 30964 pts/2  S+   Apr17   0:00 ./bs-test2
starnvsm 22671  0.0  1.4 116768 30964 pts/2  S+   Apr17   0:00 ./bs-test2
starnvsm 22672  0.0  1.4 116768 30964 pts/2  S+   Apr17   0:00 ./bs-test2
starnvsm 22673  0.0  1.4 116768 30964 pts/2  S+   Apr17   0:00 ./bs-test2
starnvsm 22674  0.0  1.4 116768 30964 pts/2  S+   Apr17   0:00 ./bs-test2
starnvsm 22675  0.0  1.4 116768 30964 pts/2  S+   Apr17   0:00 ./bs-test2
starnvsm 22676  0.0  1.4 116768 30964 pts/2  S+   Apr17   0:00 ./bs-test2
starnvsm 22677  0.0  1.4 116768 30964 pts/2  S+   Apr17   0:00 ./bs-test2
starnvsm 22678  0.0  1.4 116768 30964 pts/2  S+   Apr17   0:00 ./bs-test2
starnvsm 22679  0.0  1.4 116768 30964 pts/2  S+   Apr17   0:00 ./bs-test2
starnvsm 22680  0.0  1.4 116768 30964 pts/2  S+   Apr17   0:00 ./bs-test2
starnvsm 22681  0.0  1.4 116768 30964 pts/2  S+   Apr17   0:00 ./bs-test2
starnvsm 22682  0.0  1.4 116768 30964 pts/2  S+   Apr17   0:00 ./bs-test2
starnvsm 22683  0.0  1.4 116768 30964 pts/2  S+   Apr17   0:00 ./bs-test2
starnvsm 22684  0.0  1.4 116768 30964 pts/2  S+   Apr17   0:00 ./bs-test2
starnvsm 22685  0.0  1.4 116768 30964 pts/2  S+   Apr17   0:00 ./bs-test2
starnvsm 22686  0.0  1.4 116768 30964 pts/2  S+   Apr17   0:00 ./bs-test2
starnvsm 22687  0.0  1.4 116768 30964 pts/2  S+   Apr17   0:00 ./bs-test2
starnvsm 22688  0.0  1.4 116768 30964 pts/2  S+   Apr17   0:00 ./bs-test2
starnvsm  1528  0.0  0.0  6240  728 pts/4    S+   13:04   0:00 grep bs
[starnvsm@Bs log]$
作者: flw    时间: 2008-04-18 13:26
进程就是线程。
作者: qingfengjianke    时间: 2008-04-18 13:34

作者: ljok30    时间: 2008-04-18 13:34
标题: 回复 #2 flw 的帖子
此言怎讲?我在别的系统上运行就是一个,从没出现这种就情况?
作者: flw    时间: 2008-04-18 13:39
原帖由 ljok30 于 2008-4-18 13:34 发表
此言怎讲?我在别的系统上运行就是一个,从没出现这种就情况?

有的 ps 命令确实能看到线程。
我很早以前也用过这样的 ps 命令。
这个和 ps 命令有关系。
作者: ljok30    时间: 2008-04-18 13:44
标题: 回复 #5 flw 的帖子
ps --version的结果也是一样,在两个相同内核的ES4.0上,表现就不一样?
procps version 3.2.3
我怀疑是环境配置问题,但是有没有确切证据!
另:在别的地方看到跟gcc的-static有关系,但是我的程序关键都是一样的阿,没道理啊?
作者: jerryhua    时间: 2008-04-18 15:08
linux系统内核中无论是进程还是线程都是用一个task_struct结构表示,所不同的是各个进程的task_struct有自己独立的资源,而同一进程内的task_struct(线程)共享一些相同的资源(如进程地址空间等)。ps的功能只是遍历系统的task_struct列表并输出各个结构体相关的信息,所以你用ps的时候会发现线程表现的跟进程一个样
作者: Sorehead    时间: 2008-04-18 17:09
linux有两种线程模型LinuxThreads 和 NPTL,可以看看下面的文章。
http://www.ibm.com/developerworks/cn/linux/l-threading.html

可以通过getconf GNU_LIBPTHREAD_VERSION获取当前使用线程模型版本
楼主机器使用的应该是LinuxThreads。
作者: ljok30    时间: 2008-04-21 13:09
标题: 回复 #8 Sorehead 的帖子
非常感谢Sorehead的回复,确实如你所说,一个是LinuxThreads,另一个是NPTL,非常感谢!
但是要怎么修改设置才能把LinuxThreads换成NPTL呢?
作者: Sorehead    时间: 2008-04-21 13:33
从那个帖子可以看出线程库是glibc的一部分,因此换掉glibc应该就可以了。

不过我没有这么做过,具体操作方法就不知道了。
官方网站上应该有各种版本的glibc,可以找源代码下来编译安装,或者直接找rpm包或apt-get。
作者: ljok30    时间: 2008-04-21 13:45
标题: 回复 #10 Sorehead 的帖子
glibc的版本已经是一样的了,但是getconf GNU_LIBPTHREAD_VERSION的结果却不一样,还有什么地方需要修改吗?
作者: xi2008wang    时间: 2008-04-21 17:21
内核与编译器都应该支持NPTL
作者: ljok30    时间: 2008-04-22 09:02
原帖由 xi2008wang 于 2008-4-21 17:21 发表
内核与编译器都应该支持NPTL


谢谢你的回复,我看了两个的版本,都一样!内核2.6.9,glibc是2.3.4,应该都支持!
不知道那位大虾能知道怎么更改配置,让它支持NPTL?
作者: ljok30    时间: 2008-04-22 14:02
标题: 回复 #13 ljok30 的帖子
自己找到原因了,环境变量设置了LD_ASSUME_KERNEL=2.4.1
导致的,谢谢各位热心的cuer的回复!




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