访问C语言进程的PCB

3

我正在使用Linux,有点困惑,不知道是否可以访问进程的PCB?如果是,那么我们可以访问它的哪些内容并将它们打印到终端上,如果不能,那为什么?

感谢回答......

2个回答

12
如果你所说的PCB是指进程控制块,那么是和不是。因为它在内核地址空间中,无法被用户进程直接访问。内核会在/proc下提供一些PCB信息——详见proc(5)手册。这些信息通常以纯文本形式提供,并且可以轻松地显示出来——例如尝试:
cat /proc/self/status

是的,因为使用内核调试工具可以访问进程的struct task_struct(以及其他相关结构)。这不是一项容易的任务;您需要对内核源代码有很好的理解。基本思路是尝试在/proc/kcore/proc/kmem中定位该结构。您需要管理员(root)权限和对内核内存布局的非常好的理解。这应该只用于内核调试或探索 - 请不要在生产代码中这样做,特别是因为内部内核结构的布局在内核版本之间会在没有警告的情况下发生变化!


1
大部分的信息可以通过proc文件系统访问,通常挂载在/proc上。例如,如果我想查看我的系统上进程1的信息:
$ cd /proc/1
$ ls
...a bunch of files...

您可以通过“man proc”或“man 5 proc”了解这些文件的大部分含义。关于这些文件的大量信息也存在于Linux源代码树中的“${LINUX_SRC}/Documentation/filesystems/proc.txt”中。这些文件可以像任何其他文件一样打开和阅读。例如:

$ cat status
Name:   init
State:  S (sleeping)
Tgid:   1
Pid:    1
PPid:   0
...
$

祝你好运。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接