2021-09-17

在某些情况下,需要在Linux下使用命令行查询进程的状态信息,比如进程的当前目录,进程的内存占用等情况。具体怎么实现呢?

adb devices
adb root
adb remount
adb shell
ps -A | grep camera //查进程id
ls -al /proc/进程id/ //查进程的其他信息

无论在Linux下还是安卓内,生产一个可执行文件来进行测试。

Linux直接用gcc来创建一个程序。

#include <stdio.h>

int main()
{
int num=1;
while(1)
printf("%d\n",num++);
return 0;
}

安卓环境采用NDK进行编译。

https://wiki.n.miui.com/x/xITYIw

(1) ps命令得到进程的pid
ps -a | grep test //得到进程id__Linux下

(2) top命令得到的信息为:

PID :进程的ID
USER :进程所有者
PR :进程的优先级别,越小越优先被执行
NInice :值
VIRT :进程占用的虚拟内存
RES :进程占用的物理内存
SHR :进程使用的共享内存
S :进程的状态。S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值为负数
%CPU :进程占用CPU的使用率
%MEM :进程使用的物理内存和总内存的百分比
TIME+ :该进程启动后占用的总的CPU时间,即占用CPU使用时间的累加值。
COMMAND :进程启动命令名称

top命令是Linux下常用的性能分析工具,有点类似于windows的任务管理器,这里面包括了所有进程的信息,
包括占用内存的信息,进程状态,CPU使用率,运行时间等重要信息。
并且这些信息是动态刷新的,在我的电脑上大概1S刷新一次。

在某些情况下,需要在Linux下使用命令行查询进程的状态信息,比如进程的当前目录,进程的内存占用等情况。具体怎么实现呢?

adb devices
adb root
adb remount
adb shell
ps -A | grep camera //查进程id
ls -al /proc/进程id/ //查进程的其他信息

无论在Linux下还是安卓内,生产一个可执行文件来进行测试。

Linux直接用gcc来创建一个程序。

#include <stdio.h>

int main()
{
int num=1;
while(1)
printf("%d\n",num++);
return 0;
}

安卓环境采用NDK进行编译。

https://wiki.n.miui.com/x/xITYIw

(1) ps命令得到进程的pid
ps -a | grep test //得到进程id__Linux下

(2) top命令得到的信息为:

PID :进程的ID
USER :进程所有者
PR :进程的优先级别,越小越优先被执行
NInice :值
VIRT :进程占用的虚拟内存
RES :进程占用的物理内存
SHR :进程使用的共享内存
S :进程的状态。S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值为负数
%CPU :进程占用CPU的使用率
%MEM :进程使用的物理内存和总内存的百分比
TIME+ :该进程启动后占用的总的CPU时间,即占用CPU使用时间的累加值。
COMMAND :进程启动命令名称

top命令是Linux下常用的性能分析工具,有点类似于windows的任务管理器,这里面包括了所有进程的信息,
包括占用内存的信息,进程状态,CPU使用率,运行时间等重要信息。
并且这些信息是动态刷新的,在我的电脑上大概1S刷新一次。

Linux系统上的/proc目录是一种文件系统,即proc文件系统。与其它常见的文件系统不同的是,/proc是一种伪文件系统(也即虚拟文件系统),
存储的是当前内核运行状态的一系列特殊文件,用户可以通过这些文件查看有关系统硬件及当前正在运行进程的信息,
甚至可以通过更改其中某些文件来改变内核的运行状态。这个目录中包含每个进程的状态信息。

/proc中包含许多个对应进程pid号的目录:

cd id
ls -ll
//列出该进程的所有信息。
其中:
mem — 当前进程所占用的内存空间,由open、read和lseek等系统调用使用,不能被用户读取;

/proc/9744$ cat status

Name: gedit /进程的程序名/
State: S (sleeping) /进程的状态信息,具体参见http://blog.chinaunix.net/u2/73528/showart_1106510.html/
Tgid: 9744 /线程组号/
Pid: 9744 /进程pid/
PPid: 7672 /父进程的pid/
TracerPid: 0 /跟踪进程的pid/
Uid: 1000 1000 1000 1000 /uid euid suid fsuid/
Gid: 1000 1000 1000 1000 /gid egid sgid fsgid/
FDSize: 256 /文件描述符的最大个数,file->fds/
Groups: 0 4 20 24 25 29 30 44 46 107 109 115 124 1000 /启动该进程的用户所属的组的id/
VmPeak: 60184 kB /进程地址空间的大小/
VmSize: 60180 kB /进程虚拟地址空间的大小reserved_vm:进程在预留或特殊的内存间的物理页/
VmLck: 0 kB /进程已经锁住的物理内存的大小.锁住的物理内存不能交换到硬盘/
VmHWM: 18020 kB /文件内存映射和匿名内存映射的大小/
VmRSS: 18020 kB /应用程序正在使用的物理内存的大小,就是用ps命令的参数rss的值 (rss)/
VmData: 12240 kB /程序数据段的大小(所占虚拟内存的大小),存放初始化了的数据/
VmStk: 84 kB /进程在用户态的栈的大小/
VmExe: 576 kB /*程序所拥有的可执行虚拟内存的大小,代码段,不包括任务使用的库 */
VmLib: 21072 kB /被映像到任务的虚拟内存空间的库的大小/
VmPTE: 56 Linux系统上的/proc目录是一种文件系统,即proc文件系统。与其它常见的文件系统不同的是,/proc是一种伪文件系统(也即虚拟文件系统),
存储的是当前内核运行状态的一系列特殊文件,用户可以通过这些文件查看有关系统硬件及当前正在运行进程的信息,
甚至可以通过更改其中某些文件来改变内核的运行状态。这个目录中包含每个进程的状态信息。

/proc中包含许多个对应进程pid号的目录:

cd id
ls -ll /共享使用该信号描述符的任务的个数/
SigQ: 0/8183 /待处理信号的个数/目前最大可以处理的信号的个数/
SigPnd: 0000000000000000 /屏蔽位,存储了该线程的待处理信号/
ShdPnd: 0000000000000000 /屏蔽位,存储了该线程组的待处理信号/
SigBlk: 0000000000000000 /存放被阻塞的信号/
SigIgn: 0000000000001000 /存放被忽略的信号/
SigCgt: 0000000180000000 /存放被俘获到的信号/
CapInh: 0000000000000000 /能被当前进程执行的程序的继承的能力/
CapPrm: 0000000000000000 /进程能够使用的能力,可以包含CapEff中没有的能力,这些能力是被进程自己临时放弃的/
CapEff: 0000000000000000 /是CapPrm的一个子集,进程放弃没有必要的能力有利于提高安全性/
Cpus_allowed: 01 /可以执行该进程的CPU掩码集/
Mems_allowed: 1 /**/
voluntary_ctxt_switches: 1241 /进程主动切换的次数/
nonvoluntary_ctxt_switches: 717 /进程被动切换的次数/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值