以前的blog

博主曾在博客中国创建博客,后转至blogbus,起初因速度快选择,如今速度变慢,担忧优快云也会如此。还提到blogbus准备放他人文章,申请了国际域名,可通过特定网址访问。

以前博客中国弄了个blog,但后来根本就没去了,后来就在blogbus上弄了个blog,其实也没什么,当时喜欢速度快,现在速度好像慢了起来,不知道csdn今后会不会也这么慢,那就挺折腾人的了!现在blogbus准备放一些别人的文章算了!http://www.jter.tk哈哈,申请个那国际域名,用http://jter.blogbus.com也能访问,呵呵!但是也好想老婆啊,好想和老婆一起啊,唉!

### 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、付费专栏及课程。

余额充值