linux 跟踪系统调用和信号 命令:strace

Linux 跟踪系统调用信号

在linux中,我们经常需要对进程进行跟踪和调试,而跟踪系统调用和信号是一个非常有用的方法。有一个命令可以帮助我们实现这个功能,那就是strace

1. strace命令简介

strace是一个非常强大的工具,它可以跟踪进程执行的所有系统调用和信号。使用该命令可以非常方便地分析进程在执行过程中的行为,定位问题等。

strace可以使用以下命令启动:

strace [options] command

其中,options包括:

  • -c:统计每个系统调用的时间、次数和出错次数。
  • -e:指定要跟踪的系统调用。
  • -p:指定要跟踪的进程号。
  • -s:指定打印出的字符串的最大长度。
  • -t:在每一行输出前加上时间。
  • -o:将输出保存到指定文件中。

2. 示例:查看进程打开的文件

我们可以使用strace命令查看进程打开的文件。以ls命令为例:

strace ls

输出结果如下:

...
openat(AT_FDCWD, "/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=1810856, ...}) = 0
mmap(NULL, 1810856, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fec279ef000
close(3)                                = 0
...

从输出中可以看到ls命令打开了一个名为locale-archive的文件。

3. 示例:统计文件访问时间

使用strace命令可以统计文件的访问时间,以touch命令为例:

strace -c touch file.txt

通过使用-c选项,输出结果将统计每个系统调用的时间、次数和出错次数。

输出结果如下:


% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
  0.00    0.000000           0         2           read
  0.00    0.000000           0         4           write
  0.00    0.000000           0         4           open
  0.00    0.000000           0         6           close
  0.00    0.000000           0         4           fstat
  0.00    0.000000           0         8           mmap
  0.00    0.000000           0        12           mprotect
  0.00    0.000000           0         4           munmap
  0.00    0.000000           0         2           brk
  0.00    0.000000           0         2           access
  0.00    0.000000           0         1           execve
  0.00    0.000000           0         1           arch_prctl
------ ----------- ----------- --------- --------- ----------------
100.00    0.000000                    46           total

可以看到文件访问统计结果,其中对文件进行写操作的系统调用的执行时间为0。

4. 总结

使用strace命令可以方便地跟踪进程执行情况,查看进程打开的文件以及统计文件访问时间等。

© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容