当前位置: 技术问答>linux和unix
关于线程ID的问题(linux)
来源: 互联网 发布时间:2015-12-09
本文导语: 对于多线程,我想唯一定位一个线程.就想定位一个进程一样. 也就是说, 进程a 对应为pid1 进程b 对应为pid2 进程c 对应为pid3. 产生10个线程 线程1 tid1 ... 线程10 tid10 .一般说来,pid是不可能相同的. 但是对于...
对于多线程,我想唯一定位一个线程.就想定位一个进程一样.
也就是说,
进程a 对应为pid1
进程b 对应为pid2
进程c 对应为pid3.
产生10个线程
线程1 tid1
...
线程10 tid10
.一般说来,pid是不可能相同的.
但是对于多线程来说,它们的pid是相同.
而tid只对一个进程来说,不相同.不能保证它在全系统中是唯一的.
我想知道,我如何定位线程的这个ID,使它在整个系统中唯一.
用ps -m 来显示线程.它显示的线程就有一个PID.是唯一的.
这是我thread产生的10个线程
ps -amx
PID TTY TIME CMD
3448 ? S 0:00 /usr/sbin/sshd
3450 ? S 0:05 [sshd]
3451 pts/0 S 0:01 -bash
3649 ? S 0:00 /usr/sbin/sshd
3651 ? S 0:01 [sshd]
3652 pts/1 S 0:00 -bash
19708 pts/0 S 0:00 ./thread
19709 pts/0 S 0:00 ./thread
19710 pts/0 S 0:00 ./thread
19711 pts/0 S 0:00 ./thread
19712 pts/0 S 0:00 ./thread
19713 pts/0 S 0:00 ./thread
19714 pts/0 S 0:00 ./thread
19715 pts/0 S 0:00 ./thread
19716 pts/0 S 0:00 ./thread
19717 pts/0 S 0:00 ./thread
19718 pts/0 S 0:00 ./thread
19719 pts/0 S 0:00 ./thread
19952 pts/1 R 0:00 ps -amx
它是如何做到的?
有没有函数或者方法.
谢谢了.
也就是说,
进程a 对应为pid1
进程b 对应为pid2
进程c 对应为pid3.
产生10个线程
线程1 tid1
...
线程10 tid10
.一般说来,pid是不可能相同的.
但是对于多线程来说,它们的pid是相同.
而tid只对一个进程来说,不相同.不能保证它在全系统中是唯一的.
我想知道,我如何定位线程的这个ID,使它在整个系统中唯一.
用ps -m 来显示线程.它显示的线程就有一个PID.是唯一的.
这是我thread产生的10个线程
ps -amx
PID TTY TIME CMD
3448 ? S 0:00 /usr/sbin/sshd
3450 ? S 0:05 [sshd]
3451 pts/0 S 0:01 -bash
3649 ? S 0:00 /usr/sbin/sshd
3651 ? S 0:01 [sshd]
3652 pts/1 S 0:00 -bash
19708 pts/0 S 0:00 ./thread
19709 pts/0 S 0:00 ./thread
19710 pts/0 S 0:00 ./thread
19711 pts/0 S 0:00 ./thread
19712 pts/0 S 0:00 ./thread
19713 pts/0 S 0:00 ./thread
19714 pts/0 S 0:00 ./thread
19715 pts/0 S 0:00 ./thread
19716 pts/0 S 0:00 ./thread
19717 pts/0 S 0:00 ./thread
19718 pts/0 S 0:00 ./thread
19719 pts/0 S 0:00 ./thread
19952 pts/1 R 0:00 ps -amx
它是如何做到的?
有没有函数或者方法.
谢谢了.
|
你可以在线程的入口参数里面设置线程标记。
|
linux下的线程不是真正的线程,pthread通过kernel_thread创建线程,而kernel_thread是调用了do_fork产生的,也就是说在linux下的线程实际上是个轻量级的进程,有不同的pid
|
另外:内核2.4 和2.6 的线程管理好象是不一样的。