扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
运行SystemTap有三种形式:
1. 从文件(通常以.stp作为文件名后缀)中读入并运行脚本:stap [选项] 文件名。
2. 从标准输入中读入并运行脚本: stap [选项]。
3. 运行命令行中的脚本:stap [选项] -e 脚本。
4. 直接运行脚本文件(需要可执行属性并且第一行加上#!/usr/bin/stap):./脚本文件名用"Ctrl+C"中止SystemTap的运行。
systemtap的选项还在不断的扩展和更新中,其中最常用的选项包括:
-v -- 打印中间信息;
-p NUM -- 运行完Pass Num后停止(缺省是运行到Pass 5);
-k -- 运行结束后保留临时文件不删除;
-b -- 使用RelayFS文件系统来将数据从内核空间传输到用户空间;
-M -- 仅当使用-b选项时有效,运行结束时不合并每个CPU的单独数据文件;
-o FILE -- 输出到文件,而不是输出到标准输出;
-c CMD -- 启动探测后,运行CMD命令,直到命令结束后退出;
-g -- 采用guru模式,允许脚本中嵌入C语句;
其它更多选项请参看stap的手册。
SystemTap的语法
我们利用一个简单的systemtap脚本来介绍一下SystemTap的语法:
|
探测点(probe):每个systemtap脚本中至少需要定义一个探测点,也就是指定了在内核的什么位置进行探测。探测点名称后面紧跟的一组大括号内定义了每次内核运行到该探测点时需要运行的操作,这些操作完成后再返回探测点,继续下面的指令。这里给出了systemtap目前支持的所有探测点类型。
全局变量(global):用来定义全局变量。单个探测点函数体中使用的局部变量不需要预先定义,但是如果一个变量需要在多个探测点函数体中使用,则需要定义为全局变量。
函数(function):用来定义探测点函数体中需要用到的函数。除了可以用脚本语言定义函数以外,还可以用C语言来定义函数,只是这时函数名后面的大括号对需要换成%{ %}。例如,前面的report()函数可以写成:
|
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者