Linux下线程pid和tid

include <stdio.h>

include <pthread.h>

include <sys/types.h>

include <sys/syscall.h>

struct message
{
int i;
int j;
};

void *hello(struct message *str)
{
printf("child, the tid=%lu, pid=%d ",pthread_self(),syscall(SYS_gettid));
printf("the arg.i is %d, arg.j is %d ",str->i,str->j);
printf("child, getpid()=%d ",getpid());
while(1);
}

int main(int argc, char *argv[])
{
struct message test;
pthread_t thread_id;
test.i=10;
test.j=20;
pthread_create(&thread_id,NULL,hello,&test);
printf("parent, the tid=%lu, pid=%d ",pthread_self(),syscall(SYS_gettid));
printf("parent, getpid()=%d ",getpid());
pthread_join(thread_id,NULL);
return 0;
}
复制代码

getpid()得到的是进程的pid,在内核中,每个线程都有自己的PID,要得到线程的PID,必须用syscall(SYS_gettid);

pthread_self函数获取的是线程ID,线程ID在某进程中是唯一的,在不同的进程中创建的线程可能出现ID值相同的情况。

复制代码

include <stdio.h>

include <pthread.h>

include <stdlib.h>

include <unistd.h>

include <sys/syscall.h>

void *thread_one()
{
printf("thread_one:int %d main process, the tid=%lu,pid=%ld ",getpid(),pthread_self(),syscall(SYS_gettid));
}

void *thread_two()
{
printf("thread two:int %d main process, the tid=%lu,pid=%ld ",getpid(),pthread_self(),syscall(SYS_gettid));
}

int main(int argc, char *argv[])
{
pid_t pid;
pthread_t tid_one,tid_two;
if((pid=fork())-1)
{
perror("fork");
exit(EXIT_FAILURE);
}
else if(pid
0)
{
pthread_create(&tid_one,NULL,(void *)thread_one,NULL);
pthread_join(tid_one,NULL);
}
else
{
pthread_create(&tid_two,NULL,(void *)thread_two,NULL);
pthread_join(tid_two,NULL);
}
wait(NULL);
return 0;
}
复制代码

原文地址:https://www.cnblogs.com/lidabo/p/14713741.html