Linux环境下未知pid时如何区分进程与线程
Linux 下区分进程与线程的实现方法
Linux 内核中不存在传统意义上的独立线程实体,我们常说的线程本质是轻量级进程(LWP),常规进程和轻量级线程均由内核的task_struct结构体管理,二者都会被分配独立的 pid 编号。
如果仅需要在命令行中查询进程和对应的线程 pid,可以直接执行:pstree -p | grep 目标文件名
执行后即可看到目标进程,以及它衍生出的所有带独立 pid 的线程执行流。
如果不需要依赖外部命令,要在内核逻辑或代码层面判断当前上下文是进程还是线程,可以通过task_struct的内置字段实现:
task_struct结构体中的thread_group字段是核心判断标识:同一个进程衍生的所有线程都会被加入同一个线程组,线程组的组长就是主进程本身。
主进程的tgid(线程组ID)和自身的 pid 完全相等,而子线程的 tgid 等于所属主进程的 pid,和自身的 pid 不一致。
据此你可以直接通过两个字段的对比得出结论:
- 若
task_struct->pid == task_struct->tgid:当前上下文为进程(线程组组长) - 若
task_struct->pid != task_struct->tgid:当前上下文为所属进程下的子线程
内容的提问来源于stack exchange,提问作者Flap_LS
相关产品推荐
相关产品推荐

