#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] .