进程或程序正在进行的系统调用类型

时间:2015-07-31 10:18:53

标签: linux system-calls sysadmin devops

我试图找出一个进程或程序正在进行多少种不同类型的系统调用。我知道我可以通过以下方式获取每个系统调用的总呼叫数量。

strace -c cat abc.txt

上面的输出是命令。

% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
  -nan    0.000000           0        10           read
  -nan    0.000000           0         1           write
  -nan    0.000000           0        12           open
  -nan    0.000000           0        14           close
  -nan    0.000000           0        12           fstat
  -nan    0.000000           0        28           mmap
  -nan    0.000000           0        16           mprotect
  -nan    0.000000           0         3           munmap
  -nan    0.000000           0         3           brk
  -nan    0.000000           0         2           rt_sigaction
  -nan    0.000000           0         1           rt_sigprocmask
  -nan    0.000000           0         2           ioctl
  -nan    0.000000           0         1         1 access
  -nan    0.000000           0         1           execve
  -nan    0.000000           0         1           fcntl
  -nan    0.000000           0         2           getdents
  -nan    0.000000           0         1           getrlimit
  -nan    0.000000           0         1           statfs
  -nan    0.000000           0         1           arch_prctl
  -nan    0.000000           0         2         1 futex
  -nan    0.000000           0         1           set_tid_address
  -nan    0.000000           0         1           set_robust_list
------ ----------- ----------- --------- --------- ----------------
100.00    0.000000                   116         2 total

正如您所看到的,它返回的系统调用总数为116。我只需要知道在这种情况下有多少种不同类型的系统调用,22

有没有办法使用strace在一行中执行此操作?

1 个答案:

答案 0 :(得分:2)

将输出传递给.bss以获取统计信息中的行数。由于统计信息被写入标准错误,因此您需要为此进行一些重定向。

wc -l

由于标题,总计和分隔线,您还需要从中减去4。