Linux下获取线程TID的方法——gettid()
如何獲取進(jìn)程的PID(process ID)?
可以使用:
如何獲取線程的TID(thread ID)?
通過查看man得到如下描述:
(1) The gettid() system call first appeared on Linux in kernel 2.4.11.
(2) gettid() returns the thread ID of the current process. This is equal to the process ID (as returned by getpid(2)), unless the process is part of a thread group (created by specifying the CLONE_THREAD flag to the clone(2) system call). All processes in the same thread group have the same PID, but each one has a unique TID.
(3) gettid() is Linux specific and should not be used in programs that are intended to be portable. (如果考慮移植性,不應(yīng)該使用此接口)
但是根據(jù)man的使用說明,測試后發(fā)現(xiàn)會(huì)報(bào)找不到此接口的錯(cuò)誤“error: undefined reference to `gettid'”,通過下面鏈接可以找到更詳細(xì)的說明:
http://www.kernel.org/doc/man-pages/online/pages/man2/gettid.2.html
(1) Glibc does not provide a wrapper for this system call; call it using syscall(2).(說明Glibc并沒有提供此接口的聲明,此接口實(shí)際使用的是系統(tǒng)調(diào)用,使用者可以自己創(chuàng)建包裹函數(shù))
(2) The thread ID returned by this call is not the same thing as a POSIX thread ID (i.e., the opaque value returned by pthread_self(3)).
然后查看/usr/include/sys/syscall.h(實(shí)際在/usr/include/asm/unistd.h)可以找到我們需要的system call number:
#define __NR_gettid???? 224
因此,要獲取某個(gè)線程的TID,最nasty的方式是:
驗(yàn)證TID是否正確的方法:
查看進(jìn)程pid
(1) ps ux | grep prog_name
(2) pgrep prog_name?
查看線程tid
(1) ps -efL | grep prog_name
(2) ls /proc/pid/task
from :?http://blog.csdn.net/delphiwcdj/article/details/8476547
轉(zhuǎn)載于:https://www.cnblogs.com/hehehaha/p/6332386.html
總結(jié)
以上是生活随笔為你收集整理的Linux下获取线程TID的方法——gettid()的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: kindeditor图片上传
- 下一篇: linux 其他常用命令