check all threads in a process

check all threads in a process

#include 
#include 
#include 
#include 
#include 

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:
check all threads in a process_第1张图片















你可能感兴趣的:(check all threads in a process)