查看进程中的线程
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
的系统调用号去获取线程号。
多用组合、少用继承
基于接口而非实现进行编程