Использование dtrace в objective C

#objective-c #macos #dtrace #network-traffic

#objective-c #macos #dtrace #сетевой трафик

Вопрос:

Я использую dtrace с параметрами, приведенными ниже, для расчета использования сетевого трафика конкретного процесса :

 sudo dtrace -n 'syscall::recvfrom:return { @[pid] = sum(arg0); }'
 

Как я мог бы использовать dtrace в objective C?

Раньше я NSTask запускал dtrace с указанными выше параметрами, но поскольку результаты этой команды dtrace отображаются после завершения dtrace, я не мог видеть результаты, если не завершал dtrace. Поскольку dtrace остается в цикле для вычисления трафика данного процесса, и из-за использования NSPipe я не смог использовать [task terminate] command. Итак, мой главный вопрос:

Как использовать dtrace в objective C с NSTask ним или без него (с помощью другого метода) и правильно завершить его, а затем увидеть результаты?

Ответ №1:

Поведение по умолчанию — ничего не распечатывать, но вы можете вставить переключатель профиля, чтобы заставить его печатать выходные данные с интервалом. Добавление предложения типа:

 profile:::tick-1sec
{
  printa(@);
}
 

должно достичь желаемого эффекта.

или, как при использовании вашего sudo вызова:

 sudo dtrace -n 'syscall::recvfrom:return { @[pid] = sum(arg0); } profile:::tick-1sec { printa(@); }'
 

Комментарии:

1. Это не работает для NSTask, и все же я не мог видеть результаты через канал.

2. Я нашел решение своей проблемы с помощью приведенного выше ответа. Для получения результата через канал мы должны использовать [file availableData] .