我想编写一个SystemTap脚本,该脚本可以确定探测调用中当前PID的实际线程数。此时的数字应与 / proc / 4711 / status 输出中显示的数字相同。
我的第一种方法是计算 kprocess.create 和 kprocess.exit 事件的发生次数,但这显然只给出了线程数的相对增加/减少。 / p>
SystemTap脚本如何使用给定的API函数之一来确定此数字?也许脚本可以某种方式读取与用于proc文件系统输出相同的内核信息?
答案 0 :(得分:2)
在任何一种情况下,您都将受到竞争条件的影响 - 旧的探针无法锁定内核结构,这需要保证任务列表在计算时不会发生变化。对于一般的systemtap探测上下文尤其如此,例如在kprobe中间。
对于第一种方法,您可以添加“probe begin {}” - 任务列表的时间迭代,以从一些嵌入式C代码中填充初始线程计数。一个挑战是从embedded-C代码设置systemtap脚本全局变量(没有文档化的API),但如果你看一下翻译器生成的内容(stap -p3),它应该是可行的。
第二种方法是进行相同的迭代,但出于上述锁定原因,这通常不安全。