我试图找出一个进程或程序正在进行多少种不同类型的系统调用。我知道我可以通过以下方式获取每个系统调用的总呼叫数量。
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
在一行中执行此操作?
答案 0 :(得分:2)
将输出传递给.bss
以获取统计信息中的行数。由于统计信息被写入标准错误,因此您需要为此进行一些重定向。
wc -l
由于标题,总计和分隔线,您还需要从中减去4。