查看进程中的线程

ps -Lf 进程ID
ps -T 进程ID

gettid()系统调用

gettid() 是一个Linux系统调用,用于获取当前进程的线程ID。在使用此系统调用时,你需要包含 <sys/syscall.h> 头文件,并且可以通过直接调用或使用 syscall() 函数来进行系统调用。
注意:ps 中显示的PID列的值和gettid()的值是一样的

#include <sys/syscall.h>
syscall(SYS_gettid);

getpid系统调用

getpid() 函数是用来获取当前进程的进程ID(PID)。每个在Linux系统中运行的进程都有一个唯一的PID。这个PID在系统范围内是唯一的,可以用来标识和管理进程

getpid() 函数位于 <unistd.h> 头文件中,其原型如下:

#include <sys/types.h>
#include <unistd.h>

pid_t getpid(void);

getppid()系统调用
getppid() 函数用于获取当前进程的父进程的PID。父进程是创建当前进程的进程,因此通过这个函数可以了解进程之间的层次关系。
getppid() 函数也位于<unistd.h>头文件中,其原型如下:

#include <sys/types.h>
#include <unistd.h>

pid_t getppid(void);

pthread_self() VS syscall(SYS_gettid)

在多线程中,pthread_self()函数获得的线程号是pthread库对线程的编号,而不是Linux系统对线程的编号。

pthread_create()返回的线程号,使用top命令是查不到的,top显示的是Linux的线程号

在单线程中,Linux 的线程号和进程号是一样的。

在多线程中,主线程的线程号(main函数的线程)与进程号一样,其他线程则有各自的线程号。

getpid()函数不同的是,Linux并没有直接给一个gettid()的API,而是使用syscall()直接用SYS_gettid系统调用号去获取线程号。

posted @ 2024-05-11 14:51  guanyubo  阅读(68)  评论(0编辑  收藏  举报