對於多執行緒應用程式,如果能夠給每個執行緒命名,那麼除錯起來的便利是不言而喻的。
今天看lwn上的週報,看到有人正在給prctl新增給程序內其它執行緒命名的介面,並從中得知,給執行緒自身命名的介面已經存在,不由竊喜,遂寫下以下驗證**:
#include
#include
#include
void* tmain(void *arg)
int main(void)
編譯並執行:
xiaosuo@gentux test $ gcc t_threadname.c -l pthread
xiaosuo@gentux test $ ./a.out
xx在另乙個終端,通過ps找到a.out的pid:
xiaosuo@gentux test $ ps aux | grep a.out
xiaosuo 29882 0.0 0.0 14144 544 pts/6 sl+ 16:23 0:00 ./a.out
看命名是否奏效:
xiaosuo@gentux test $ cd /proc/29882/task/
xiaosuo@gentux task $ ls
29882 29883
xiaosuo@gentux task $ cd 29883/
xiaosuo@gentux 29883 $ cat cmdline
./a.outxiaosuo@gentux 29883 $
有點兒鬱悶,cmdline顯示的竟然還是./a.out。通過執行時列印的xx和strace檢查prctl的返回值確認prctl確實成功執行。懷疑這個名字只能通過prctl獲得,有點兒失落,可心仍不甘。檢視ps的man,並實驗,終於找到了"xx":
xiaosuo@gentux 29883 $ ps -l -p 29882
pid lwp tty time cmd
29882 29882 pts/6 00:00:00 a.out
29882 29883 pts/6 00:00:00 xx
strace後知道這個「xx」竟然隱匿於stat和status:
驗畢!:)
用prctl給執行緒命名
對於多執行緒應用程式,如果能夠給每個執行緒命名,那麼除錯起來的便利是不言而喻的。可以用prctl給程序內其它執行緒命名的介面,測試 如下 include include include include void pfunc void arg int main void makefile phony ...
prctl 函式給執行緒命名
1.包含的標頭檔案為 sys prctl.h 2.函式用法 int 用法 prctl pr set name char name 3.pr set name表示給執行緒命名,第二個引數是程序名字串,長度至多16位元組 下面看使用示例 void c x threadcyclefunc void uns...
用prctl給執行緒命名 原始碼實現
分類 linux 系統程式設計 對於多執行緒應用程式,如果能夠給每個執行緒命名,那麼除錯起來的便利是不言而喻的。可以用prctl給程序內其它執行緒命名的介面,測試 如下 include include include include void pfunc void arg int main void...