开发者社区 问答 正文

怎样取子进程的内存使用情况

在linux系统上用C语言如何取得fork出来的子进程的内存使用情况?
我尝试过getrusage函数,但是好像都不是期望的数值

展开
收起
a123456678 2016-06-03 17:05:24 1831 分享 版权
2 条回答
写回答
取消 提交回答
  • fork出来应该能获取到子进程Id,然后进/proc读取对应进程的相关信息

    2019-07-17 19:26:53
    赞同 展开评论
  • ActivityManager activityManager = (ActivityManager) context.getSystemService(ACTIVITY_SERVICE);
    MemoryInfo memoryInfo = new ActivityManager.MemoryInfo();
    activityManager.getMemoryInfo(memoryInfo);

    Log.i(TAG, " memoryInfo.availMem " + memoryInfo.availMem + "n" );
    Log.i(TAG, " memoryInfo.lowMemory " + memoryInfo.lowMemory + "n" );
    Log.i(TAG, " memoryInfo.threshold " + memoryInfo.threshold + "n" );

    List runningAppProcesses = activityManager.getRunningAppProcesses();

    Map pidMap = new TreeMap();
    for (RunningAppProcessInfo runningAppProcessInfo : runningAppProcesses)
    {

    pidMap.put(runningAppProcessInfo.pid, runningAppProcessInfo.processName);

    }
    Collection keys = pidMap.keySet();

    for(int key : keys)
    {

    int pids[] = new int[1];
    pids[0] = key;
    android.os.Debug.MemoryInfo[] memoryInfoArray = activityManager.getProcessMemoryInfo(pids);
    for(android.os.Debug.MemoryInfo pidMemoryInfo: memoryInfoArray)
    {
        Log.i(TAG, String.format("** MEMINFO in pid %d [%s] **\n",pids[0],pidMap.get(pids[0])));
        Log.i(TAG, " pidMemoryInfo.getTotalPrivateDirty(): " + pidMemoryInfo.getTotalPrivateDirty() + "\n");
        Log.i(TAG, " pidMemoryInfo.getTotalPss(): " + pidMemoryInfo.getTotalPss() + "\n");
        Log.i(TAG, " pidMemoryInfo.getTotalSharedDirty(): " + pidMemoryInfo.getTotalSharedDirty() + "\n");
    }

    }

    2019-07-17 19:26:53
    赞同 展开评论
问答分类:
问答地址: