Если вы удовлетворены общей используемой пропускной способностью ввода / вывода (или если ваша программа почти полностью выполняет сетевой ввод / вывод), вы можете посмотреть /proc/<pid>/io
файл. Вы хотите rchar
и wchar
поля. Возможно, вы захотите вычесть read_bytes
и write_bytes
, так как они представляют чтения и записи на уровне хранения. См. Раздел 3.3 http://www.kernel.org/doc/Documentation/filesystems/proc.txt .
Если вам нужно больше разрешения ... вы можете написать сценарий, используя, lsof
и strace
, хотя было бы больно правильно все угадывать. Основная идея заключается в том, чтобы разобрать вывод strace -p <pid>
, захватывая первый параметр (= дескриптор файла) и возвращаемое значение (= число байт) из read()
, write()
, send()
и recv()
вызовов ( ПРИМЕЧАНИЕ Есть еще несколько системных вызовов для прослушивания, я гавань» выследил их всех). Отбросить отрицательные значения; они указывают на ошибки. Используйте, lsof -p <pid>
чтобы выяснить, какие файловые дескрипторы являются сокетами TCP / UDP, и суммировать количество для fd. Эта стратегия не требует root, если вы владеете процессом, который вы проверяете, но писать было бы очень сложно, не говоря уже о том, чтобы писать хорошо.