确定进程信息编程在达尔文/ OSX [英] Determine Process Info Programmatically in Darwin/OSX

查看:129
本文介绍了确定进程信息编程在达尔文/ OSX的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下成员函数的类:

I have a class with the following member functions:


/// caller pid
virtual pid_t Pid() const = 0; 

/// physical memory size in KB
virtual uint64_t Size() const = 0;  

/// resident memory for this process
virtual uint64_t Rss() const = 0; 

/// cpu used by this process
virtual double PercentCpu() const = 0; 

/// memory used by this process
virtual double PercentMemory() const = 0; 

/// number of threads in this process
virtual int32_t Lwps() const = 0; 

本类的职责是返回有关来电者的过程信息。物理内存的大小可以很容易地通过一个sysctl的电话确定,pid是微不足道,但其余的呼声躲避我,除了在调用ps或顶部的popen和解析输出 - 这是不能接受的。任何帮助将大大AP preciated。

This class' duty is to return process information about caller. Physical memory size can easily determined by a sysctl call, and pid is trivial, but the remaining calls have eluded me, aside from invoking a popen on ps or top and parsing the output - which isn't acceptable. Any help would be greatly appreciated.

要求:

在编译G ++ 4.0

无OBJ-C

OSX 10.5

Requirements:
Compiles on g++ 4.0
No obj-c
OSX 10.5

推荐答案

进程信息来源于 pidinfo

cristi:~ diciu$ grep proc_pidinfo /usr/include/libproc.h

int proc_pidinfo(int pid, int flavor, uint64_t arg,  void *buffer, int buffersize);

CPU负载来自 host_statistics

cristi:~ diciu$ grep -r host_statistics /usr/include/

/usr/include/mach/host_info.h:/* host_statistics() */

/usr/include/mach/mach_host.defs:routine host_statistics(

/usr/include/mach/mach_host.h:/* Routine host_statistics */

/usr/include/mach/mach_host.h:kern_return_t host_statistics

有关详细信息,检查出来源和 lsof的,他们都是开源的(需要注册成为苹果开发者,但是这是免费的):

For more details, check out sources for top and lsof, they are open source (you need to register as an Apple developer but that's free of charge):

<一个href=\"http://www.opensource.apple.com/darwinsource/Current/top-38/libtop.c\">http://www.opensource.apple.com/darwinsource/Current/top-38/libtop.c

后来编辑:所有这些接口特定的版本,所以你写的生产code(libproc.h)时,需要考虑到这一点:

Later edit: All these interfaces are version specific, so you need to take that into account when writing production code (libproc.h):

/*
 * This header file contains private interfaces to obtain process information.
 * These interfaces are subject to change in future releases.
 */

这篇关于确定进程信息编程在达尔文/ OSX的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆