简体   繁体   中英

Per Process disk read/write statistics in Mac OS X

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 statistics.
For reference Similar question asked for PC.

Use iotop (as root), for example:

iotop -C 3 10

But the best way (for me) is:

sudo fs_usage -f filesys

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.

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.

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).

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM