如何獲取程序的pid(process id)?
可以使用:
#include
pid_t getpid(void);
通過檢視標頭檔案說明,可以得到更詳細的資訊:
find /usr/include -name unistd.h
/usr/include/asm/unistd.h
/usr/include/bits/unistd.h
/usr/include/linux/unistd.h
/usr/include/sys/unistd.h
/usr/include/unistd.h
cat /usr/include/unistd.h | grep getpid
/* get the process id of the calling process. */
extern __pid_t getpid (void) __throw;
如何獲取執行緒的tid(thread id)?
#include
printf("the id of this thread is: %ld\n", (long int)syscall(224));
或者比較elegant的方式是:
#include
#define gettidv1() syscall(__nr_gettid)
#define gettidv2() syscall(sys_gettid)
printf("the id of this thread is: %ld\n", (long int)gettidv1());// 最新的方式
printf("the id of this thread is: %ld\n", (long int)gettidv2());// traditional form
ps: 在/usr/include/sys/syscall.h中可以看到關於__nr_和sys_兩個巨集的區別,實際最後使用的都是__nr_。
// /usr/include/bits/syscall.h
#define sys_gettid __nr_gettid
#ifndef _libc
/* the linux kernel header file defines macros `__nr_', but some
programs expect the traditional form `sys_'. so in building libc
we scan the kernel's list and produce with macros for
all the `sys_' names. */
# include
#endif
驗證tid是否正確的方法:
檢視程序pid
(1) ps ux | grep prog_name
(2) pgrep prog_name
檢視執行緒tid
(1) ps -efl | grep prog_name
(2) ls /proc/pid/task
執行緒的handle和tid
執行緒是cpu分配時間執行任務的最小單位。在linux中,核心並沒有執行緒和程序的概念,所謂執行緒,只是可以和其他兄弟執行緒共享資源的程序。在posix中,pthread create建立執行緒,並將執行緒的handle或者說id傳遞給第乙個引數,在這還是稱其為handle。這個handle與pth...
linux 下獲取執行緒ID
linux多執行緒環境下gettid pthread self 兩個函式都獲得執行緒id,但這2個id有所不同 gettid是核心中的執行緒的id posix thread id可以在乙個程序內唯一標識乙個執行緒,但如果放到系統範圍內的話就得用gettid了。include 需要包含這個標頭檔案in...
Linux下獲取執行緒ID的方法
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 versio...