linux内核编程:拿到创建线程的进程的pid

Linux内核编程,能拿到当前任务的pid(current->pid),可如果当前是线程,想拿到创建它的进程的pid,怎么拿呢?
这样: current->signal->pgrp
这招儿仅适用于pthread创建的线程,其它的没有测试。

====== 2009.12.16分割线 ======
感谢刘刚同学提供:
最佳的方法是取current->tgid , tgid
即缩写 thread group id。

内核代码判断一个线程是否是线程组的leader也是这个方法:
下句宏定义摘自2.6.9内核 sched.h
#define thread_group_leader(p)  (p->pid == p->tgid)

current->signal->pgrp 有另外一个准确的含义:
sched.h中有这么一个函数:
static inline pid_t process_group(struct task_struct *tsk) {
        return tsk->signal->pgrp;
}
这说明 current->signal->pgrp 表示进程组的leader id。
当然对于一个线程来说current->signal->pgrp和current->tgid是一致的。


相关文章

分类

留言:

关于文章

This page contains a single entry by DongHao published on 05 22, 2009 5:56 PM.

用virtualbox安装freedos was the previous entry in this blog.

intel免费书 is the next entry in this blog.

Find recent content on the main index or look in the 存档 to find all content.