c - 在 C 中访问进程的 PCB

标签 c linux linux-kernel osdev

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

感谢您的回答......

最佳答案

如果说 PCB,您指的是过程控制 block ,是也不是...

不能,因为它在内核地址空间,不能被用户进程直接访问。内核在 /proc 下提供来自 PCB 的一些信息 - 请参阅 proc(5) 的联机帮助页了解详情。此信息通常以纯文本形式提供,并且可以轻松显示 - 例如:

cat /proc/self/status

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

关于c - 在 C 中访问进程的 PCB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5025155/

相关文章:

c - 如何在网站 lxr.free-electrons.com 找到结构的完整定义?

linux - Linux 内置服务的源代码在哪里?

c - 被标记为病毒的简单 C 程序

从 __user 指针复制数据

c - 指针和引用传递的指针

linux - 为什么 tar 不保留文件权限?

c++ - g++ unicode 字符 ifstream

linux - Linux内核参数中modprobe.blacklist和rd.driver.blacklist的区别

c++ - findtheinfo_ds() 中的 WordNet SynSet ptrlist 仅进入一级

c - 为什么这个for循环会无限循环? (C)