How do I get programatically per process disk i/o statistics in Mac OS X. In \'Activity Monitor\' application or in \'top\' command we can only get whole system disk i/o statist
Since OP specifically asked for disk I/O statistics I'd recommend
sudo fs_usage -f diskio
which focuses only on read/write events, contrary to -f filesys
as mentioned in the accepted answer. (Don't know if the diskio
option wasn't available back then.)
I found iStat Menus, which sits in the menu bar. Only shows the top 5 disk read/write users (and I'm not sure if it's the sum, but it doesn't sort).
Since there isn't an answer here about how to do this programatically, here's some more info. You can get some info out of libproc if you can use C/C++/ObjectiveC++. The function proc_pid_rusage
gives you a bunch of resource info for a given process, but the ones related to your question are:
struct rusage_info_v3 {
...
uint64_t ri_diskio_bytesread;
uint64_t ri_diskio_byteswritten;
...
};
Sample code:
pid_t pid = 10000;
rusage_info_current rusage;
if (proc_pid_rusage(pid, RUSAGE_INFO_CURRENT, (void **)&rusage) == 0)
{
cout << rusage.ri_diskio_bytesread << endl;
cout << rusage.ri_diskio_byteswritten << endl;
}
See <libproc.h>
and <sys/resource.h>
for more info.
Use iotop
(as root), for example:
iotop -C 3 10
But the best way (for me) is:
sudo fs_usage -f filesys
Activity Monitor shows per process I/O statistics in the "disk" tab (perhaps its new since this question was asked). See "Bytes Written" and "Bytes Read" columns.