我在 Linux 中工作,我有点困惑,我是否可以访问进程的 PCB?如果是,那么我们可以访问它的哪些内容并将它们打印到终端上,如果不是,那为什么不呢?
谢谢回答 .....
我在 Linux 中工作,我有点困惑,我是否可以访问进程的 PCB?如果是,那么我们可以访问它的哪些内容并将它们打印到终端上,如果不是,那为什么不呢?
谢谢回答 .....
如果通过 PCB,您的意思是过程控制块,是和否......
不,因为它在内核地址空间中,用户进程不能直接访问。内核提供了来自 PCB 的一些信息/proc
- 有关详细信息,请参阅手册页proc(5)
。此信息通常以纯文本形式提供,并且可以轻松显示 - 尝试,例如:
cat /proc/self/status
是的,因为使用内核调试工具struct task_struct
可以访问进程的(和其他相关结构)。这不是一件容易的事。您需要对内核源代码有很好的理解。基本思想是尝试将结构定位在/proc/kcore
or中/proc/kmem
。您将需要管理(root)权限和对内核内存布局的非常好的理解。这应该只用于内核调试或探索 - 请不要在生产代码中这样做,特别是当内核结构的布局在内核版本之间更改时不会发出警告!
大多数信息可以通过 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
...
$
祝你好运。