2015-07-31 2 views
1

Я пытаюсь найти, сколько различных типов системных вызовов происходит в процессе или программе. Я знаю, что я могу сделать следующее, чтобы получить общее количество вызовов для каждого syscall, как показано ниже.тип syscall процесса или программы делает

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?

+2

Разве вы не написали одну строчку? – Barmar

+0

Эта строка возвращает все системные вызовы и их подсчеты. Мне нужно всего лишь общее количество различных системных вызовов. Например. 10 различных типов системного вызова среди 1000 итоговых системных вызовов, сделанных – hjelpmig

ответ

2

Протяните выход до wc -l, чтобы получить количество строк в статистике. Поскольку статистика записывается в стандартную ошибку, для этого вам необходимо выполнить некоторую переадресацию.

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

Вы также должны вычесть 4 из этого, из-за линий заголовка, общего и разделителя.

+0

Спасибо Barmar. Вот что я хотел :) – hjelpmig