1

我试图找出一个进程或程序正在制作多少种不同类型的系统调用。我知道我可以执行以下操作来获取每个系统调用的调用总数,如下所示。

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

4

1 回答 1

2

管道输出以wc -l获取统计信息中的行数。由于统计信息写入标准错误,因此您需要为此进行一些重定向。

strace -c cat abc.txt 2>&1 >/dev/null | wc -l

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

于 2015-07-31T10:31:48.043 回答