如何仅将syscalls列表过滤到特定进程名称?

时间:2016-04-20 13:04:54

标签: macos tracing dtrace

我有以下dtrace单线:

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

按程序打印系统调用次数(按 Ctrl - C

如何在探针上方添加​​过滤器,仅按名称应用于流程(例如php)?与dtruss -n <name>类似。

1 个答案:

答案 0 :(得分:1)

好的,这是相当简单的,因为可以在dtruss中检查过滤是如何完成的:

$ 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 */

其中NAME是进程名称。

因此,单行命令是(用您的进程名称替换php):

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