linux中线程ptid,Linux线程ID和进程ID

1. Linux线程的线程ID和进程ID Linux内核并不支持真正意义上的线程,Linux线程库是用与普通进程具有同样内核调度视图的轻量级进程来实现线程支持的。这些轻量级进程拥有独立的进程id,在进程调度、信号处理、IO等方面享有与普通进程一样的能力。

每个Linux线程都同时具有线程id和进程id,其中进程id就是内核所维护的进程号,而线程id则由线程库分配和维护。

1)每个进程都有自己的PID,这是唯一的。

2)除此之外,每个进程还有其它的ID标识,比如处于某个线程组中的所有进程都有一个统一的线程组ID(TGID),如果进程没有使用线程,PID和TGID是相同的,其实主线程的PID和TGID就是相同的。

3)独立进程可以合并成为进程组。

4)几个进程组可以合并成一个会话,会话中的所有进程都有同样的会话ID。

重点关注一下 task_struct 中与进程ID相关的两个成员:

struct task_struct{

pid_t pid;

pid_t tgid;

}属于同一个进程的所有线程,tgid是相同的,都指向线程组第一个进程(主线程)的PID值。

可以分别通过getpid(), syscall(SYS_gettid)获取对应的值。结合下面第2部分的程序,能够更直观地看出getpid()获取tgid、syscall()获取PID。

因此,对于Linux而言,所谓线程组共享进程ID,其实是通过 tgid 表示的,而线程组中的每个线程本质上是有自己的进程ID号的。

2. 通过程序查看线程相关的ID

#include

#include

#include

#include

pid_t gettid()

{

return syscall(__NR_gettid);

}

static void *phandle(void *arg)

{

pid_t pid_chld, pid_chld1;

pthread_t tid;

pid_chld = getpid();

pid_chld1 = gettid();

tid = pthread_self();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值