记一段聊天记录
目前还看不太懂 r0bertz 说的啥…先放这儿..以后看…
起因是我在问下面两个命令输出的结果为什么不一样.
为什么这两个命令看到的不一样?
<r0bertz> bones7456, 执行 /lib/libc.so.6
<r0bertz> Native POSIX Threads Library by Ulrich Drepper et al
<r0bertz> bones7456, scf_exs 这是个什么东西?
<r0bertz> 商业软件?
<bones7456> r0bertz: 是的,我们公司自己写的…
<r0bertz> bones7456, 你用ps -eLf | grep 试试
<r0bertz> linuxthreads-0.10 by Xavier Leroy
<r0bertz> 哈哈
<r0bertz> bones7456, 这是典型的linuxthreads的特征
<bones7456> r0bertz: 啊? 就是线程?
<bones7456> r0bertz: pgerp能看到线程号?
<r0bertz> bones7456, 在使用linuxthreds线程库的glibc的机器上
<r0bertz> 其实直到现在,用户层线程和内核线程在linux里还是1:1关系
<r0bertz> 也就是nptl是1:1模型
<r0bertz> 但是
<r0bertz> 在nptl里,posix threading semantics是被严格遵守的
<r0bertz> 该是线程的你用看进程的东西,你看不到
<bones7456> 这么复杂?呵呵
<r0bertz> linuxthreads不是这样的
<r0bertz> linuxthreads里每个进程专门有一个管理线程
<r0bertz> 和posix语义有差异
<bones7456> r0bertz: 就是说 pgrep 能看到不同的线程号,而ps只能看到进程号?
<r0bertz> junmin, 似乎没见过大写的
<r0bertz> bones7456, 不能这么说
<r0bertz> 有前提
<r0bertz> 看线程库的实现种类
<r0bertz> nptl里都是只能看进程
<r0bertz> 当然加了适当的参数,ps也能看线程
<bones7456> r0bertz: 那在同一台机器上的 pgrep 和 ps 也有差异啊,他们用的不是一个库?
<r0bertz> bones7456, 这个东西和内核也有关系
<bones7456> r0bertz: 对了,刚那 ps -eLf 执行不了
<r0bertz> bones7456, 你的服务器太旧了
<r0bertz> 还是2.4
<r0bertz> 2.4上没有nptl线程库
<r0bertz> 唯一的例外是rh9
<bones7456> r0bertz: 服务器是 Red Hat Linux release 9
<r0bertz> …
<bones7456> r0bertz: 就是 rh9 啊…
<r0bertz> 你确定?
<bones7456> 至少这个是这样输出的
<r0bertz> /lib/tls/libc.so.6?
<bones7456> r0bertz: /lib/tls/libc.so.6 ==> http://paste.ubuntu.org.cn/4210
<bones7456> NPTL 0.29 by Ulrich Drepper 有这个
<r0bertz> bones7456, 这就对了
<r0bertz> 不过,我还没试过怎样指定具体使用哪个
<bones7456> r0bertz: 想起来了,这家伙就是前几天来北京讲座,你说偶像的那个,哈哈
<r0bertz> bones7456, 对阿
<bones7456> r0bertz: 强的~
<r0bertz> bones7456, ps和pgrep应该是直接到/proc里查的
<bones7456> r0bertz: 貌似 ps 很复杂,兼容了很多不同的系统…不知道有没有影响
<r0bertz> 2.4和2.6的proc里的结构不同
<r0bertz> 有关进程的信息
<bones7456> r0bertz: 你真强~这些我听着就晕了,哈…
<r0bertz> bones7456, 哪里哪里