我正在尝试收集linux内核中特定sys调用(sys_clone)的循环计数。也就是说,我的过程不会是唯一一个调用它的过程,我不能提前知道我的pid;所以我必须记录每个pid的每次调用。
我遇到的问题是我能弄清楚如何输出这些数据的唯一方法(debugfs,sysfs,procfs)涉及静态大小的缓冲区,这些缓冲区将被来自调用sys_clone的其他进程的无关数据快速覆盖。
那么,有没有人知道如何在linux中的用户空间可访问文件中附加任意数量的行?
答案 0 :(得分:0)
您可以采用printk()/ klogd方法,并使用通过/ proc导出的循环缓冲区。用户空间进程在读取/ proc文件时会阻塞,并且一旦读取从缓冲区中删除的内容就会阻塞。实际上,您可以查看是否可以修改klogd / syslogd以读取/ proc文件,因此您不需要实现用户空间部分。
如果你对一些更简单的东西很好,只需用带有一些前缀的规范化形式printk()你的信息,然后使用这个前缀从syslog中过滤掉它。
还有一些可能性(例如使用netlink向用户空间发送消息),但是从内核写入文件并不是我推荐的。
答案 1 :(得分:0)
您可以隐藏右侧task_struct
中的计数,并通过/proc/<pid>/
中的每个进程文件显示它。