1

我想编写一个 SystemTap 脚本,它可以确定探测调用中当前 PID 的实际线程数。此时数字应该与 /proc/4711/status的输出中显示的相同。

我的第一种方法是计算kprocess.createkprocess.exit事件的发生次数,但这显然只给你线程数的相对增加/减少。

SystemTap 脚本如何使用给定的 API 函数之一来确定这个数字?也许脚本可以以某种方式读取与用于 proc 文件系统输出相同的内核信息?

4

1 回答 1

2

在任何一种情况下,您都将受到竞争条件的影响 - stap 探针无法锁定内核结构,这需要保证任务列表在计数时不会更改。对于一般的 systemtap 探测上下文尤其如此,例如在 kprobe 的中间。

对于第一种方法,您可以添加任务列表的“probe begin {}”时间迭代,以从一些嵌入式 C 代码中初始化初始线程计数。一个挑战是从嵌入式 C 代码设置 systemtap 脚本全局变量(没有记录的 API),但是如果您查看翻译器生成的内容(stap -p3),它应该是可行的。

第二种方法是进行相同的迭代,但由于上述锁定原因,这通常不安全。

于 2013-01-09T15:04:30.063 回答