Linux kernel 从Linux内核向文件追加数据

Linux kernel 从Linux内核向文件追加数据,linux-kernel,Linux Kernel,我正在尝试收集linux内核中特定sys调用(sys\u clone)的周期计数测量值。也就是说,我的流程不会是唯一调用它的流程,我无法提前知道我的pid;所以我必须为每个pid记录它的每次调用 我所遇到的问题是,我能找出如何输出这些数据(debugfs、sysfs、procfs)的唯一方法涉及静态大小的缓冲区,这些缓冲区将被来自调用sys\u clone的其他进程的无关数据快速覆盖 那么,有人知道如何在linux中向用户空间可访问的文件追加任意数量的行吗?您可以采用printk()/klogd

我正在尝试收集linux内核中特定sys调用(sys\u clone)的周期计数测量值。也就是说,我的流程不会是唯一调用它的流程,我无法提前知道我的pid;所以我必须为每个pid记录它的每次调用

我所遇到的问题是,我能找出如何输出这些数据(debugfs、sysfs、procfs)的唯一方法涉及静态大小的缓冲区,这些缓冲区将被来自调用sys\u clone的其他进程的无关数据快速覆盖

那么,有人知道如何在linux中向用户空间可访问的文件追加任意数量的行吗?

您可以采用printk()/klogd方法,并使用通过/proc导出的循环缓冲区。用户空间进程在读取/proc文件时会阻塞,一旦它读取了从缓冲区中删除的内容。事实上,您可以看看是否可以修改klogd/syslogd以同时读取/proc文件,因此不需要实现用户空间部分

如果您擅长一些更简单的东西,只需将您的信息以带有前缀的规范化形式打印出来,然后使用此前缀从系统日志中过滤出来即可


还有一些可能性(例如,使用netlink向用户空间发送消息),但我不建议从内核写入文件。

您可以将计数隐藏在右侧的
任务结构中,并通过
/proc/
中的每个进程文件使其可见