3.2 stap 脚本
本节我们来看看 stap 脚本的基本语法。
1. Systemtap 执行细节
SystemTap脚本运行时,会启动一个对应的SystemTap会话。整个会话大致流程如下:
- 首先,SystemTap会检查脚本中用到的tapset,确保它们都存在于tapset库中(通常是/usr/share/systemtap/tapset/)
- SystemTap会把找到的tapset替换成在tapset库中对应的定义
- tapset是tap(听诊器)的集合,指一些预定义的SystemTap事件或函数
- SystemTap接着会把脚本转化成C代码,运行系统的C编译器编译出一个内核模块。
- SystemTap随即加载该模块,并启用脚本中所有的探,这一步由system-runtime包的staprun完成
- 每当被监控的事件发生,对应的处理程序就会被执行。
- 一旦SystemTap会话终止,探针会被禁用,内核模块也会被卸载。
1.1 tapsets
tapsets是一些包含常用的探针和函数的内置脚本,你可以在SystemTap脚本中复用它们。当用户运行一个SystemTap脚本时,SystemTap会检测脚本中的事件和处理程序,并在翻译脚本成C代码之前,加载用到的tapset。

