Linux下獲取執行緒ID的方法

2021-06-27 11:49:27 字數 1589 閱讀 9961

linux下多執行緒程式發生coredump時,用

gdb /path/to/program/file core

可以看到所有執行緒

root@rubic:~/test/thread# gdb a.out core

gnu gdb (gdb) 7.6.1

license gplv3+: gnu gpl version 3 or later this is free software: you are free to change and redistribute it.

there is no warranty, to the extent permitted by law.  type "show copying"

and "show warranty" for details.

this gdb was configured as "i486-slackware-linux".

for bug reporting instructions, please see:

...reading symbols from /root/test/thread/a.out...done.

[new lwp 826]

[new lwp 825]

但是哪個執行緒才是導致coredump的執行緒呢?

一般用gettid()函式就可以得到,但gittid在預設配置下會鏈結失敗

這時就要靠系統呼叫出馬了

#include #include //linux system call for thread id

#include #include void *nbi(void *arg)

int main()

執行結果:

root@rubic:~/test/thread# ./a.out

main thread lwpid = 825

main thread tid = 3076090112

child thread lwpid = 826

child thread tid = 3076086592

12segmentation fault (core dumped)

coredump原因:

(gdb) bt

#0  0xb75ed50e in __gi__io_vfscanf () from /lib/libc.so.6

#1  0xb75fc183 in __isoc99_scanf () from /lib/libc.so.6

#2  0x080486ca in nbi (arg=0x0) at test.c:12

#3  0xb7728955 in start_thread () from /lib/libpthread.so.0

#4  0xb767e1ae in clone () from /lib/libc.so.6

(gdb)

向0x0000000c(保留位址)寫資料導致sigsegv

linux 下獲取執行緒ID

linux多執行緒環境下gettid pthread self 兩個函式都獲得執行緒id,但這2個id有所不同 gettid是核心中的執行緒的id posix thread id可以在乙個程序內唯一標識乙個執行緒,但如果放到系統範圍內的話就得用gettid了。include 需要包含這個標頭檔案in...

linux獲取執行緒id的方法學習

最近一直在想 如何確認兩段 是不是在同乙個執行緒中執行的呢?通過檢視資料,發現一種比較簡單的方法就是在 中使用printf將當前執行緒的id列印出來。而這也分成兩種情況 1.如果是pthread,則使用,include pthread t pthread self void 2.如果不是pthrea...

linux下的執行緒ID和程序ID

在描述執行緒id和程序id之前我們先來分清楚幾個概念 1.使用者級執行緒和核心級執行緒 什麼是使用者級執行緒?使用者級執行緒核心的切換由使用者態程式自己控制核心切換,不需要核心干涉,少了進出核心態的消耗,但不能很好的利用多核cpu,目前linux pthread大體是這麼做的。執行緒組id?執行緒組...