我想使用 SystemTap 编写简单的类似 strace 的脚本。主要目标是只捕获系统中所有进程的一些系统调用(如打开、关闭、读取、写入等)。(不能用 strace 做到这一点,因为 strace'ing 整个系统等于即时系统冻结)。
现在它是这样的:
#!/usr/bin/env stap
probe syscall.*
{
printf("PID: %d\tNAME: %s\tARGSTR: %s\n",pid(), name, argstr);
}
当我想将输出保存到文件时,问题就开始了。Stap 脚本不断发现自己正在写入文件,因此它永远不会结束循环。
我认为解决方案是这样的:
#!/usr/bin/env stap 探测系统调用。* { 如果(pid()!= myOwnPid()) printf("PID: %d\tNAME: %s\tARGSTR: %s\n",pid(), name, argstr); }
但我不知道任何提供运行 stap 脚本的 pid 的函数。