在C中访问PCB的过程

时间:2011-02-17 04:47:37

标签: c linux linux-kernel osdev

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

感谢您的回答.....

2 个答案:

答案 0 :(得分:9)

如果是PCB,则表示过程控制块,是和否......

,因为它位于内核地址空间中,无法由用户进程直接访问。内核从/proc下的PCB提供了一些信息 - 有关详细信息,请参阅proc(5)的联机帮助页。此信息通常以纯文本形式提供,并且可以轻松显示 - 例如尝试:

cat /proc/self/status

,因为使用内核调试工具可以访问进程的struct task_struct(和其他相关结构)。这不是一件容易的事;你需要很好地理解内核源代码。基本思路是尝试在/proc/kcore/proc/kmem中找到结构。您将需要管理(root)权限并非常了解内核内存布局。这应该仅用于内核调试或探索 - 请不要在生产代码中执行此操作,特别是内核内容结构的布局在内核版本之间没有警告的情况下更改!

答案 1 :(得分:0)

大部分信息都可以通过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
...
$
祝你好运。