关于线程号的一些总结

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/nice_wen/article/details/80801099

由于本人才疏学浅,本文难免存在遗漏之处,欢迎大家留言指正,本人将感激不尽。 强调内容

一、线程号的获取

首先,我们要知道一个进程可能包含多个线程,每个线程都有自己的id。获取线程id存在下面两种方法:

1、pthread_t pthread_self(void):
 其中返回值类型为pthread_t,类型的定义如下所示:

typedef unsigned long int pthread_t

  注意,pthread_self获取的线程id只是在该线程所属的进程内有用,进程内部可以通过pthread_self获取的id来区分线程,并且在不同进程内的线程可能存在相同的由pthread_self所获取的id,系统无法用此id来区分线程。

2、pid_t gettid(void):
  返回类型为pid_t,实际上pid_t为int类型。 
  在Linux中进程id类型也为pid_t,所以我们可以看到,在linux 中线程其实是通过进程来实现的。
  通过gettid()获取的id在整个系统内都是可见的,每个线程都具有独一无二的由gettid获取的id。

gettid用法举例

#include <sys/syscall.h>
printf("%d %d\n", getpid(), syscall(SYS_gettid)); //通过系统调用使用

二、命令行查看某个进程的所有线程

bash> ps -p 105357 -T
   PID   SPID TTY          TIME CMD
105357 105357 pts/18   00:00:00 ta
105357 105358 pts/18   00:00:00 ta

  此处获取进程105357的所有线程,可以看到该进程有两个线程,105357和105358,其中105357为主线程。

三、获取系统内的所有线程

bash> ps -Lef | grep 105357
UID         PID   PPID    LWP  C NLWP STIME TTY
wen      105357  98076 105357  0    2 13:47 pts/18   00:00:00 ./ta
wen      105357  98076 105358  0    2 13:47 pts/18   00:00:00 ./ta
wen      105412 104637 105412  0    1 13:51 pts/19   00:00:00 grep --color=auto 105357

可通过命令ps -Lef获取所有线程,其中列LWP(轻量级进程)即为线程。

猜你喜欢

转载自blog.csdn.net/nice_wen/article/details/80801099
今日推荐