免费注册 查看新帖 |

Chinaunix

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

关于 Linux 的进程id 和线程id 的输出 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-10-10 15:21 |只看该作者 |倒序浏览
我 的程序的 pid 和 tid 的输出 貌似杂乱无章

第一列,第二列是十进制,第三列是 十六进制

  1. pid 17245      tid -1328485472  (0xb0d0eba0)
  2. pid 17245      tid -1338975328  (0xb030dba0)
  3. pid 17245      tid -1349465184  (0xaf90cba0)
  4. pid 17245      tid -1359955040  (0xaef0bba0)
  5. pid 17245      tid -1370444896 ( 0xae50aba0)
复制代码


这些线程是依次创建的,他们看起来好像没有什么规律啊
以什么样的格式输出比较合适呢 ?

[ 本帖最后由 yeajchao 于 2006-10-10 15:34 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2006-10-11 12:38 |只看该作者
人们总是说,linux的每个线程的进程都是不同的
但是,为什么我的 FC5 系统上看到的都是相同的

论坛徽章:
0
3 [报告]
发表于 2006-10-11 14:08 |只看该作者
第一个问题,你应当是用了带符号整数的格式化字符串来输出无符号整数(pid_t),产生溢出.

第二个问题,这句话在nptl成为linux线程的标准模型之前是对的,早期的linuxthreads用的是LWP(轻量级进程)模型,自然每个线程(轻量级进程)有各自不同的进程ID.

论坛徽章:
0
4 [报告]
发表于 2006-10-11 14:37 |只看该作者
我用 %u 的方式输出,结果也是杂乱无章的阿
其实,我总觉得,pid_t 和 pthread_t 不一定是单纯的一个整数
有可能是一个   struct
要不然怎么能有pthread_equal()这样的函数呢

pid 3631       tid 2966236064 (0xb0cd2ba0)
pid 3631       tid 2955746208 (0xb02d1ba0)
pid 3631       tid 2945256352 (0xaf8d0ba0)
pid 3631       tid 2934766496 (0xaeecfba0)


还有 ,按照 楼上的意思,难道现在的Linux线程模型不是 LWP 了 吗,
dgb输出的调试信息还是这样的阿 ,我个人认为,Linux 的线程模型仍然是 LWP的一对一线程模型
[New Thread -1208654160 (LWP 365]
[New Thread -1306883168 (LWP 3661)]
[New Thread -1318163552 (LWP 3662)]
[New Thread -1328653408 (LWP 3663)]
[New Thread -1339143264 (LWP 3664)]

论坛徽章:
0
5 [报告]
发表于 2006-10-11 17:45 |只看该作者
关于tid的类型,也就是pthread_t的定义是 os depend 的,对操作系统有很大的依赖性,可能是int,也可能是Uint,还可能是指向某个结构的指针,句柄,正因为如此,Posix Thread才提供了一个专门用来比较tid的函数,叫做pthread_equal. 你那么直接打印不一定行得通,就算能直接打印,在你知道生成id的算法前,他们看起来也似乎是无规律的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP