strace常用来跟踪进程执行时的系统调用和所接收的信号。 在Linux世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式切换至内核态模式,通过系统调用访问硬件设备。strace可以跟踪到一个进程产生的系统调用,包括参数,返回值,执行消耗的时间。

  1. $strace cat /dev/null
  2. execve("/bin/cat", ["cat", "/dev/null"], [/* 22 vars */]) = 0
  3. brk(0) = 0xab1000
  4. access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
  5. mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f29379a7000
  6. access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
  7. ...

参考文献

[1]strace 跟踪进程中的系统调用