check all threads in a process
#include <stdio.h>
#include <sys/syscall.h>
#include <assert.h>
#include <pthread.h>
#include <unistd.h>
void *nbi(void *arg)
{
int i;
printf("child thread lwpid: %u\n", syscall(SYS_gettid));
printf("child thread id: %u\n", pthread_self());
while(1)
{
sleep(2);
printf("come out for fresh air!\n");
}
}
int main()
{
pthread_t tid;
int rc;
printf("main thread lwpid: %u\n", syscall(SYS_gettid));
printf("main thread tid: %u\n", pthread_self());
rc = pthread_create(&tid, NULL, nbi, NULL);
assert(0 == rc);
pthread_join(tid, NULL);
return 0;
}
notice:
1. SYS_gettid is defined in sys/syscall.h;
2. the location of sys/syscall.h in Ubuntu PC is like /usr/include.
3. use the below build cmd to complile gettid.c:
gcc -pthread -o gettid gettid.c
the execution result:
aspirs@ubuntu1204:/work/syscall/gettid$ ./gettid
main thread lwpid: 4960
main thread tid: 3298965248
child thread lwpid: 4961
child thread id: 3290658560
come out for fresh air!
come out for fresh air!the result of 'ps -T -p 4960' during process 'gettid' running:
aspirs@ubuntu1204:/usr/include$ ps -T -p 4960
PID SPID TTY TIME CMD
4960 4960 pts/3 00:00:00 gettid
4960 4961 pts/3 00:00:00 gettid
according to gettid's log, we can know 4960 and 4961 on SPID column are the TIDs of main thread of gettid and the another thread in gettid.
the result of 'top -H -p 4960' during process gettid running:
获取进程内所有线程ID
本文通过一个C语言示例程序介绍了如何在一个进程中创建子线程,并展示了如何使用SYS_gettid系统调用来获取主线程及子线程的线程ID(TID)。此外,还提供了编译和运行该程序的方法,以及如何使用ps和top命令来验证线程ID。
3302

被折叠的 条评论
为什么被折叠?



