在 Linux 上用 strace 来理解系统调用( 三 )


【在 Linux 上用 strace 来理解系统调用】现在,使用 -p 标志和 PID(在上面使用 ps 找到)对运行中的进程运行 strace 。运行 strace 之后,其输出说明了所接驳的进程的内容及其 PID 。现在,strace 正在跟踪 cat 命令进行的系统调用 。看到的第一个系统调用是 read,它正在等待文件描述符 0(标准输入,这是运行 cat 命令的终端)的输入:
现在,返回到你运行 cat 命令的终端,并输入一些文本 。我出于演示目的输入了 x0x0 。注意 cat 是如何简单地重复我输入的内容的 。因此,x0x0 出现了两次 。我输入了第一个,第二个是 cat 命令重复的输出:
返回到将 strace 接驳到 cat 进程的终端 。现在你会看到两个额外的系统调用:较早的 read 系统调用,现在在终端中读取 x0x0,另一个为 write,它将 x0x0 写回到终端,然后是再一个新的 read,正在等待从终端读取 。请注意,标准输入(0)和标准输出(1)都在同一终端中:
想象一下,对守护进程运行 strace 以查看其在后台执行的所有操作时这有多大帮助 。按下 Ctrl + C 杀死 cat 命令;由于该进程不再运行,因此这也会终止你的 strace 会话 。
如果要查看所有的系统调用的时间戳,只需将 -t 选项与 strace 一起使用:
如果你想知道两次系统调用之间所花费的时间怎么办?strace 有一个方便的 -r 命令,该命令显示执行每个系统调用所花费的时间 。非常有用,不是吗?
总结strace 实用程序非常有助于理解 Linux 上的系统调用 。要了解它的其它命令行标志,请参考手册页和在线文档 。


推荐阅读