2016-04-20 9 views
1

Ich habe den folgenden dtrace Einzeiler.Wie filter Liste von syscalls nur zu bestimmten Prozessnamen?

sudo dtrace -n 'syscall:::entry { @num[probefunc] = count(); }' 

, die durch Programmnummer syscall Zahl druckt (nach Ctrl schlagen -C

Wie kann ich Filter über Sonde in der nur ein Verfahren durch seinen Namen gilt (zB php)? ähnlich wie dtruss -n <name>.

Antwort

1

Ok, das ist ziemlich einfach, da es in dtruss geprüft werden kann, wie die Filterung erfolgt:

$ grep -C5 NAME $(which dtruss) 
syscall:::entry 
/(OPT_command && pid == $target) || 
(OPT_pid && pid == PID) || 
(OPT_name && NAME == strstr(NAME, execname)) || 
(OPT_name && execname == strstr(execname, NAME)) || 
(self->child)/ 
{ 
    /* set start details */ 

wo NAME ist der Prozessname.

So ist die Einzeiler Befehl (ersetzen php mit dem Prozessnamen):

sudo dtrace -n ' 
    inline string NAME = "php"; 
    syscall:::entry 
    /(NAME == strstr(NAME, execname)) || (execname == strstr(execname, NAME))/ 
{ @num[probefunc] = count(); } 
' 
+1

Auf einem Mac können Sie einfach '/ execname == "php"/' – mah