https://www.hdzikao.com

process context是什么意思(c++进程遍历)【c++进程遍历android怎样获取当前apk所占用的内存】

[导读] 大家好,今天小热关注到一个比较有意思的话题,就是关于ProcessContext的问题,于是小编就整理了3个相关介绍ProcessContext的解答,让我们一起看看吧。 文章目录: process context是什么意思 c++进程

process context是什么意思(c++进程遍历)【c++进程遍历android怎样获取当前apk所占用的内存】

大家好,今天小热关注到一个比较有意思的话题,就是关于ProcessContext的问题,于是小编就整理了3个相关介绍ProcessContext的解答,让我们一起看看吧。

文章目录:

  1. process context是什么意思
  2. c++进程遍历
  3. android 怎样获取当前apk所占用的内存

一、process context是什么意思

process context

[英][ˈprəuses ˈkɔntekst][美][ˈprɑsˌɛs ˈkɑnˌtɛkst]

进程关联; 进程上下文

例:The fork call results in the creation of a child process, while an exec call replaces the current process context with the new program.

调用fork的结果是建立一个子进程,而调用exec则将新程序取代当前进程上下文。

过程内容。。。。。

二、c++进程遍历

遍历进程名和上下文

#include <ntifs.h>

VOID

Unload(

IN PDRIVER_OBJECT DriverObject

);

VOID GetAllProcess(ULONG Address);

NTSTATUS

DriverEntry( IN PDRIVER_OBJECT DriverObject,

IN PUNICODE_STRING RegistryPath )

{

NTSTATUS status = STATUS_SUCCESS;

ULONG Address;

ULONG oldAddress;

//得到当前进程的地址

Address = (ULONG)PsGetCurrentProcess();

//得到EPROCESS中链表的偏移

Address += 0x88;

//用oldAddress保存当前进程链表的地址

oldAddress = Address;

//遍历进程链表

do

{

GetAllProcess(Address);

//让Address指向当前链表的下一个进程链表的地址(注意是Flink)

Address = *(ULONG*)Address;

}while( oldAddress!=Address );//当得到的链表地址与保存的地址相等说明遍历完整个线程链表,返回

DriverObject->DriverUnload = Unload;

return status;

}

VOID

Unload(

IN PDRIVER_OBJECT DriverObject

)

{

}

VOID GetAllProcess(ULONG Address)

{

//得到对应的EPROCESS结构

Address -= 0x88;

//EPROCESS偏移0x174为ImageFileName(进程名)

DbgPrint("ProcessName %s \n",(char*)Address+0x174);

//EPROCESS偏移0x18为页目录物理地址

DbgPrint("Process Context %d \n",*(ULONG*)(Address+0x18));

}

三、android 怎样获取当前apk所占用的内存

这个方法有很多,常用的是 adb shell dumpsys meminfo <package_name> 这可以看到比较全面的信息,由于Android是有内存共享的,所以通常有 VSS,RSS,PSS,USS等不同的内存表述,比较常用的是PSS,会将共享库按照比例分配给当前内存

private void getRunningAppProcessInfo(Context context) {    

      mActivityManager = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);       

 //获得系统里正在运行的所有进程      

List<RunningAppProcessInfo> runningAppProcessesList = mActivityManager.getRunningAppProcesses();       

 for (RunningAppProcessInfo runningAppProcessInfo : runningAppProcessesList) {          // 进程ID号         

 int pid = runningAppProcessInfo.pid;         

 // 用户ID          i

nt uid = runningAppProcessInfo.uid;        

  // 进程名          

String processName = runningAppProcessInfo.processName;          

// 占用的内存         

 int[] pids = new int[] {pid};       

  Debug.MemoryInfo[] memoryInfo =mActivityManager.getProcessMemoryInfo(pids);          

int memorySize = memoryInfo[0].dalvikPrivateDirty;            System.out.println("processName="+processName+",pid="+pid+",uid="+uid+",memorySize="+memorySize+"kb");      }  }

到此,以上就是小编对于ProcessContext的问题就介绍到这了,希望介绍关于ProcessContext的3点解答对大家有用。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

相关文章阅读