【发布时间】:2018-09-17 05:02:54
【问题描述】:
我正在尝试弄清楚如何从 PID 中获取进程描述符。
来自http://www.linuxforums.org/forum/kernel/153873-getting-task_struct-process-using-its-pid.html,适用于 Linux 内核 2.4
static inline struct task_struct *find_task_by_pid(int pid)
{
struct task_struct *p, **htable = &pidhash[pid_hashfn(pid)];
for(p = *htable; p && p->pid != pid; p = p->pidhash_next)
;
return p;
}
链接似乎说pidhash[pid_hashfn(pid)] 是一个指向task_struct 对象的指针,该对象的PID 值为pid。
但在《Understanding The Linux Kernel》一书中似乎并非如此,该书谈到了 Linux 内核 2.6.11。我不确定2.6.11和2.4的相关代码是否相同。从书中我了解到pidhash[pid_hashfn(pid)] 的类型为hlist_head,它是一个指向hlist_node 对象的指针。 hlist_node 对象是task_struct 对象的pids[0].pid_chain。那么如何从pidhash[pid_hashfn(pid)]获取task_struct对象呢?
注意
我问这个只是为了阅读理解 Linus 内核(Linux 内核 2.6.11),所以我不是在问最近的 Linux 内核版本,尽管你也可以提及它是如何在最近的 Linux 内核版本中完成的。
我想我这里的困难与我之前的问题Whose address shall the node of a linked list store: other node, or data structure having a node as a field?
有关
谢谢。
【问题讨论】:
标签: linux process linux-kernel pid