check all threads in a process

来源:互联网 发布:java游戏合集百度云盘 编辑:程序博客网 时间:2024/06/06 12:39
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: 4960main thread tid: 3298965248child thread lwpid: 4961child thread id: 3290658560come 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:















0 0