2

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

谢谢回答 .....

4

2 回答 2

10

如果通过 PCB,您的意思是过程控制块,是和否......

,因为它在内核地址空间中,用户进程不能直接访问。内核提供了来自 PCB 的一些信息/proc- 有关详细信息,请参阅手册页proc(5)。此信息通常以纯文本形式提供,并且可以轻松显示 - 尝试,例如:

cat /proc/self/status

的,因为使用内核调试工具struct task_struct可以访问进程的(和其他相关结构)。这不是一件容易的事。您需要对内核源代码有很好的理解。基本思想是尝试将结构定位在/proc/kcoreor中/proc/kmem。您将需要管理(root)权限和对内核内存布局的非常好的理解。这应该只用于内核调试或探索 - 请不要在生产代码中这样做,特别是当内核结构的布局在内核版本之间更改时不会发出警告!

于 2011-02-17T04:52:52.897 回答
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
...
$

祝你好运。

于 2011-02-17T05:01:35.310 回答