在 Linux 下,ptrace 系统调用被支持用于进程控制,并且它的工作方式与 4.3BSD 中相同。为了获取进程和系统信息,Linux 也提供了一个 /proc 文件系统,但具有非常不同的语义。在 Linux 下,/proc 由许多文件组成,这些文件提供通用的系统信息,例如内存使用情况、负载平均值、已加载的模块统计信息和网络统计信息。这些文件通常使用 read 和 write 访问,它们的内容可以使用 scanf 解析。Linux 下的 /proc 文件系统还为每个正在运行的进程提供一个目录条目,以进程 ID 命名,其中包含文件条目,用于获取诸如命令行、指向当前工作目录和可执行文件的链接、打开的文件描述符等信息。内核动态地响应 read 请求提供所有这些信息。这种实现方式与 Plan 9 中发现的 /proc 文件系统非常相似,但它确实有其缺点——例如,对于像 ps 这样的工具要列出所有正在运行的进程的信息表,必须遍历许多目录并打开和读取许多文件。相比之下,在其他 UNIX 系统上使用的 kvm 例程直接读取内核数据结构,只需要少量的系统调用。
显然,每种实现方式都截然不同,因此移植使用它们的应用程序可能被证明是一项真正的任务。应该指出的是,SVR4 /proc 文件系统与 Linux 中发现的文件系统是非常不同的,它们可能不能在相同的上下文中使用。可以说,任何使用 kvm 例程或 SVR4 /proc 文件系统的程序都不是真正可移植的,并且这些代码段应该为每个操作系统重写。
Linux 的 ptrace 调用与 BSD 中发现的调用几乎相同,但有一些差异
Linux 不提供 kvm 例程,用于从用户程序读取内核地址空间,但一些程序(最值得注意的是 kmem_ps)实现了它们自己版本的这些例程。一般来说,这些不是可移植的,并且任何使用 kvm 例程的代码可能都依赖于内核中某些符号或数据结构的可用性——这不是一个安全的假设。kvm 例程的使用应被视为特定于架构的。