改变Fork()系统调用

5

你好,我正在尝试创建一个系统调用来计算被调用的 fork() 的次数。我打算改变 fork() 系统调用,使其具有计数器,以便跟踪 fork() 被调用的次数。我计划在 fork.h 中添加一个静态变量,并在每次调用 fork.c 时将其递增。但是我完全不理解 fork.c 中正在发生的事情。这是正确的方法吗?


你想要在整个系统中执行这个操作,还是只在你自己的程序中执行? - Jerry Coffin
我想要统计系统中所有进程的分支数量。 - ddd
你不能只是启动一个进程并查询它的pid吗?由于系统启动时只有一个进程在运行,所以你的程序的pid就是fork被调用的次数,对吧? - Carl Norum
4
不太对。已经停止的进程的进程ID会被重复使用,它们不会一直单调递增。 - Adam Rosenfield
2个回答

12
Linux内核已经维护了整个系统中fork的总数计数器。 copy_process()执行的任务之一是增加total_forks计数器,它涉及到fork的大部分工作。
这个计数器在用户空间以/proc/stat中的processes行公开(通过此处的代码)。

1

fork 的源代码可以在 <linux kernel source tree>/kernel/fork.c 文件中找到。该函数是 do_fork。您可以在返回错误的 else 语句之前添加您的代码。请记住,您需要使用这个新内核进行编译和重启。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接