以前的blog

文本提及需填入摘要,还贴出以前的blog地址http://blog.wapchina.org 。
我考真是差劲啊,必须填入摘要....那也不用吧我的正文置空吧??!!

贴个以前的blog地址 http://blog.wapchina.org


### tgid 与 pgrp 的关系及结构体完整定义 在 Linux 内核中,`tgid` 和 `pgrp` 是用于描述进程组和线程组的重要字段。以下是它们的详细关系及 `task_struct` 的相关定义。 #### tgid 与 pgrp 的关系 - `tgid`(Thread Group ID)表示线程组的标识符,通常等同于主线程的 PID[^1]。 - `pgrp`(Process Group ID)表示进程组的标识符,它是一个更高层次的概念,用于将多个进程组织在一起以方便信号发送和作业控制[^2]。 在大多数情况下,`tgid` 和 `pgrp` 可能相同,但它们的作用不同: - 当一个进程创建线程时,所有线程共享同一个 `tgid`,即主线程的 PID。 - 进程组 ID (`pgrp`) 则可能由父进程或系统调用(如 `setpgid`)设置,用于区分不同的作业控制单元。 #### task_struct 中的相关字段 以下是 `task_struct` 中与 `tgid` 和 `pgrp` 相关的关键字段: ```c struct task_struct { /* 线程组标识符 */ pid_t tgid; /* 进程组标识符 */ struct pid *group_leader->pids[PIDTYPE_PGID].pid; /* 父进程 */ struct task_struct *real_parent; struct task_struct *parent; /* 子进程链表 */ struct list_head children; /* 兄弟进程链表 */ struct list_head sibling; /* 线程组的领导者 */ struct task_struct *group_leader; /* PID 链接信息 */ struct pid_link pids[PIDTYPE_MAX]; }; ``` - `tgid`:直接存储线程组的标识符。 - `pids[PIDTYPE_PGID].pid`:通过 `pid_link` 结构体链接到实际的 `pid` 对象,表示进程组 ID。 - `group_leader`:指向线程组的领导者,即主线程的 `task_struct`。 #### 完整的 task_struct 定义 以下是 `task_struct` 的简化完整定义,包含与 `tgid` 和 `pgrp` 相关的部分: ```c struct task_struct { volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped */ void *stack; atomic_t usage; unsigned int flags; unsigned int ptrace; /* PID 相关 */ pid_t pid; pid_t tgid; /* 线程组领导 */ struct task_struct *group_leader; /* 进程组相关 */ struct pid *pids[PIDTYPE_MAX].pid; /* 父子进程关系 */ struct task_struct *real_parent; struct task_struct *parent; struct list_head children; struct list_head sibling; /* 调度器相关 */ const struct sched_class *sched_class; int prio; /* 内存管理 */ struct mm_struct *mm, *active_mm; /* 文件系统和信号处理 */ struct fs_struct *fs; struct files_struct *files; struct signal_struct *signal; struct sighand_struct *sighand; /* 锁和同步 */ spinlock_t alloc_lock; struct mutex pi_lock; /* CPU 亲和性和调度信息 */ cpumask_var_t cpus_allowed; unsigned int policy; }; ``` #### 关键点解析 - `tgid` 和 `pid` 在单线程进程中是相同的,但在多线程进程中,`tgid` 表示线程组的标识符,而 `pid` 表示具体线程的标识符。 - `pgrp` 是通过 `pids[PIDTYPE_PGID].pid` 字段间接获取的,它表示进程所属的进程组。 - `group_leader` 指向线程组的领导者,即主线程的 `task_struct`,所有线程共享同一个 `tgid`。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值