直接输入ps后可以看到如下信息:

  1. # ps
  2. ps
  3. USER     PID   PPID  VSIZE  RSS     WCHAN    PC         NAME
  4. root      1     0     276    188   c0099f1c 000086e8 S /init
  5. root      2     0     0      0     c004df64 00000000 S kthreadd
  6. root      3     2     0      0     c003fa28 00000000 S ksoftirqd/0
  7. root      4     2     0      0     c004abc0 00000000 S events/0
  8. root      5     2     0      0     c004abc0 00000000 S khelper
  9. root      6     2     0      0     c004abc0 00000000 S suspend
  10. root      7     2     0      0     c004abc0 00000000 S kblockd/0
  11. root      8     2     0      0     c004abc0 00000000 S cqueue
  12. root      9     2     0      0     c01780d0 00000000 S kseriod
  13. root      10    2     0      0     c004abc0 00000000 S kmmcd
  14. root      11    2     0      0     c006efa8 00000000 S pdflush
  15. root      12    2     0      0     c006efa8 00000000 S pdflush
  16. root      13    2     0      0     c0073480 00000000 S kswapd0
  17. root      14    2     0      0     c004abc0 00000000 S aio/0
  18. root      22    2     0      0     c0175900 00000000 S mtdblockdc

那么这些项各代表着什么意思呢?

  1. USER:  进程的当前用户;
  2. PID   : 毫无疑问, process ID的缩写,也就进程号;
  3. PPID  :process parent ID,父进程ID
  4. VSIZE  : virtual size,进程虚拟地址空间大小;
  5. RSS    : 进程正在使用的物理内存的大小;
  6. WCHAN  :进程如果处于休眠状态的话,在内核中的地址;
  7. PC  : program counter,
  8. NAME: process name,进程的名称

对比linux下的参数信息:

  1. root@long-desktop:~# ps aux
  2. USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
  3. root         1  0.0  0.2   2804  1684 ?        Ss   21:11   0:01 /sbin/init
  4. root         2  0.0  0.0      0     0 ?        S    21:11   0:00 [kthreadd]
  5. root      2286  0.0  0.4   8888  3172 ?        Ss   21:52   0:00 sshd: root@pts/0
  6. root      2352  0.0  0.2   4684  2048 pts/0    Ss+  21:52   0:00 -bash
  7. root      2454  0.4  0.4   8888  3164 ?        Rs   22:06   0:00 sshd: root@pts/1
  8. root      2518  0.1  0.2   4684  2004 pts/1    Ss   22:06   0:00 -bash
  9. root      2551  0.0  0.1   2736  1088 pts/1    R+   22:06   0:00 ps aux

在Linux下ps命令各项含义如下所示:

  • %CPU 进程的cpu占用率
  • %MEM 进程的内存占用率
  • VSZ 进程所使用的虚存的大小
  • RSS 进程使用的驻留集大小或者是实际内存的大小
  • TTY 与进程关联的终端(tty)
  • STAT 检查的状态:进程状态使用字符表示的,如R(running正在运行或准备运行)、S(sleeping睡眠)、I(idle空闲)、Z (僵死)、D(不可中断的睡眠,通常是I/O)、P(等待交换页)、W(换出,表示当前页面不在内存)、N(低优先级任务)T(terminate终 止)、W has no resident pages
  • START (进程启动时间和日期)
  • TIME ;(进程使用的总cpu时间)
  • COMMAND (正在执行的命令行命令)
  • NI (nice)优先级
  • PRI 进程优先级编号
  • PPID 父进程的进程ID(parent process id)
  • SID 会话ID(session id)
  • WCHAN 进程正在睡眠的内核函数名称;该函数的名称是从/root/system.map文件中获得的。
  • FLAGS 与进程相关的数字标识

源码如下:

android下ps命令的源码的位置:android/system/core/toolbox/ps.c,其实现如下:

  1. int ps_main(int argc, char **argv)
  2. {
  3. DIR *d;
  4. struct dirent *de;
  5. char *namefilter = 0;
  6. int pidfilter = 0;
  7. int threads = 0;
  8. d = opendir("/proc");
  9. if(d == 0) return -1;
  10. while(argc > 1){
  11. if(!strcmp(argv[1],"-t")) {
  12. threads = 1;
  13. } else if(!strcmp(argv[1],"-x")) {
  14. display_flags |= SHOW_TIME;
  15. } else if(!strcmp(argv[1],"-p")) {
  16. display_flags |= SHOW_PRIO;
  17. }  else if(isdigit(argv[1][0])){
  18. pidfilter = atoi(argv[1]);
  19. } else {
  20. namefilter = argv[1];
  21. }
  22. argc--;
  23. argv++;
  24. }
  25. printf("USER     PID   PPID  VSIZE RSS   %sWCHAN    PC         NAME\n",
  26. (display_flags&SHOW_PRIO)?"PRIO  NICE  RTPRI SCHED ":"");
  27. while((de = readdir(d)) != 0){
  28. if(isdigit(de->d_name[0])){
  29. int pid = atoi(de->d_name);
  30. if(!pidfilter || (pidfilter == pid)) {
  31. ps_line(pid, 0, namefilter);
  32. if(threads) ps_threads(pid, namefilter);
  33. }
  34. }
  35. }
  36. closedir(d);
  37. return 0;
  38. }

每一行数据是如何获得的:

  1. static int ps_line(int pid, int tid, char *namefilter)
  2. {
  3. char statline[1024];
  4. char cmdline[1024];
  5. char user[32];
  6. struct stat stats;
  7. int fd, r;
  8. char *ptr, *name, *state;
  9. int ppid, tty;
  10. unsigned wchan, rss, vss, eip;
  11. unsigned utime, stime;
  12. int prio, nice, rtprio, sched;
  13. struct passwd *pw;
  14. sprintf(statline, "/proc/%d", pid);
  15. stat(statline, &stats);
  16. if(tid) {
  17. sprintf(statline, "/proc/%d/task/%d/stat", pid, tid);
  18. cmdline[0] = 0;
  19. } else {
  20. sprintf(statline, "/proc/%d/stat", pid);
  21. sprintf(cmdline, "/proc/%d/cmdline", pid);
  22. fd = open(cmdline, O_RDONLY);
  23. if(fd == 0) {
  24. r = 0;
  25. } else {
  26. r = read(fd, cmdline, 1023);
  27. close(fd);
  28. if(r < 0) r = 0;
  29. }
  30. cmdline[r] = 0;
  31. }
  32. fd = open(statline, O_RDONLY);
  33. if(fd == 0) return -1;
  34. r = read(fd, statline, 1023);
  35. close(fd);
  36. if(r < 0) return -1;
  37. statline[r] = 0;
  38. ptr = statline;
  39. nexttok(&ptr); // skip pid
  40. ptr++;          // skip "("
  41. name = ptr;
  42. ptr = strrchr(ptr, ')'); // Skip to *last* occurence of ')',
  43. *ptr++ = '\0';           // and null-terminate name.
  44. ptr++;          // skip " "
  45. state = nexttok(&ptr);
  46. ppid = atoi(nexttok(&ptr));
  47. nexttok(&ptr); // pgrp
  48. nexttok(&ptr); // sid
  49. tty = atoi(nexttok(&ptr));
  50. nexttok(&ptr); // tpgid
  51. nexttok(&ptr); // flags
  52. nexttok(&ptr); // minflt
  53. nexttok(&ptr); // cminflt
  54. nexttok(&ptr); // majflt
  55. nexttok(&ptr); // cmajflt
  56. #if 1
  57. utime = atoi(nexttok(&ptr));
  58. stime = atoi(nexttok(&ptr));
  59. #else
  60. nexttok(&ptr); // utime
  61. nexttok(&ptr); // stime
  62. #endif
  63. nexttok(&ptr); // cutime
  64. nexttok(&ptr); // cstime
  65. prio = atoi(nexttok(&ptr));
  66. nice = atoi(nexttok(&ptr));
  67. nexttok(&ptr); // threads
  68. nexttok(&ptr); // itrealvalue
  69. nexttok(&ptr); // starttime
  70. vss = strtoul(nexttok(&ptr), 0, 10); // vsize
  71. rss = strtoul(nexttok(&ptr), 0, 10); // rss
  72. nexttok(&ptr); // rlim
  73. nexttok(&ptr); // startcode
  74. nexttok(&ptr); // endcode
  75. nexttok(&ptr); // startstack
  76. nexttok(&ptr); // kstkesp
  77. eip = strtoul(nexttok(&ptr), 0, 10); // kstkeip
  78. nexttok(&ptr); // signal
  79. nexttok(&ptr); // blocked
  80. nexttok(&ptr); // sigignore
  81. nexttok(&ptr); // sigcatch
  82. wchan = strtoul(nexttok(&ptr), 0, 10); // wchan
  83. nexttok(&ptr); // nswap
  84. nexttok(&ptr); // cnswap
  85. nexttok(&ptr); // exit signal
  86. nexttok(&ptr); // processor
  87. rtprio = atoi(nexttok(&ptr)); // rt_priority
  88. sched = atoi(nexttok(&ptr)); // scheduling policy
  89. tty = atoi(nexttok(&ptr));
  90. if(tid != 0) {
  91. ppid = pid;
  92. pid = tid;
  93. }
  94. pw = getpwuid(stats.st_uid);
  95. if(pw == 0) {
  96. sprintf(user,"%d",(int)stats.st_uid);
  97. } else {
  98. strcpy(user,pw->pw_name);
  99. }
  100. if(!namefilter || !strncmp(name, namefilter, strlen(namefilter))) {
  101. printf("%-8s %-5d %-5d %-5d %-5d", user, pid, ppid, vss / 1024, rss * 4);
  102. if(display_flags&SHOW_PRIO)
  103. printf(" %-5d %-5d %-5d %-5d", prio, nice, rtprio, sched);
  104. printf(" %08x %08x %s %s", wchan, eip, state, cmdline[0] ? cmdline : name);
  105. if(display_flags&SHOW_TIME)
  106. printf(" (u:%d, s:%d)", utime, stime);
  107. printf("\n");
  108. }
  109. return 0;
  110. }

Android ps命令执行后的各项参数含义的更多相关文章

  1. 【Linux】linux history命令执行后显示历史命令执行时间

    vim  ~/.bashrc 或者 ~/.bash_profile  或者 获取root权限修改vim /etc/profile 最后添加 export HISTTIMEFORMAT="%F ...

  2. 亲测有效的解决在vue cli@3 create 命令执行后 node-sass无法安装上的问题

    在使用Vue cli@3 搭建工程手脚架的过程中.当我们选择了采用 sass 处理 css 编译.在使用vue create test 命令行执行到最后.会到以下这步:然后开始报错: Download ...

  3. bat 获取命令执行后的多个返回值,并取最后一个

    最近在使用bat,遇到了这样的问题,获取adb shell cat命令之后的所有返回值,查了很长时间,才找到,现分享给大家. 举例如下: @for /f "tokens=*" %% ...

  4. linux 统计命令执行后的行数或者统计目录下文件数目

    ls |wc 是统计你这个目录下的文件数目.ls |wc -l是输出第一个结果即31即文件的数目.

  5. linux top ps 命令

    http://javawind.net/p131 VIRT:virtual memory usage 虚拟内存1.进程“需要的”虚拟内存大小,包括进程使用的库.代码.数据等2.假如进程申请100m的内 ...

  6. 【RAC】使用一条“ps”命令获取Linux环境下全部RAC集群进程信息

    如何仅使用一条ps命令便能获取到所有与RAC集群进程相关的信息.  从所使用的命令角度上看很简单,仅需使用ps命令结合grep命令便能实现.问题关键是需要确定检索哪些关键字. 1.与RAC集群有关的进 ...

  7. PHP代码审计学习之命令执行漏洞挖掘及防御

    [1]可能存在命令执行漏洞的函数: 00x1:常用的命令执行函数:exec.system.shell_exec.passthru 00x2:常用的函数处理函数:call_user_func.call_ ...

  8. php代码审计5审计命令执行漏洞

    命令执行漏洞:通过易受攻击的应用程序在主机操作系统上执行任意命令,用户提供的数据(表单,cookie,http头等)未过滤 挖掘思路:用户能够控制函数输入,存在可执行代码的危险函数 命令执行和代码执行 ...

  9. Redis 命令执行过程(上)

    今天我们来了解一下 Redis 命令执行的过程.在之前的文章中<当 Redis 发生高延迟时,到底发生了什么>我们曾简单的描述了一条命令的执行过程,本篇文章展示深入说明一下,加深读者对 R ...

随机推荐

  1. MongoDB使用小结:一些不常见的经验分享

    最近一年忙碌于数据处理相关的工作,跟MongoDB打交道极多,以下为实践过程中的Q&A,后续会不定期更新补充. 另有<MongoDB使用小结:一些常用操作分享>,注:本文完成时Mo ...

  2. 《bootstrap》实战---小问题,大Bug

    参照书中代码写了个示例,能够实现大页面单行导航,小页面显示收缩按钮,但是就是不能让收缩按钮发挥作用.也不知道哪儿出了问题. 想想算了,代码也不多,重新来吧.写道导航的时候,突然发现一个<nav& ...

  3. 【Alpha】Daily Scrum Meeting第八次

    一.本次Daily Scrum Meeting主要内容 抓紧冲刺(接下去两天都在下午增加一个小会议) 剩余任务的概况 二.项目进展 学号尾数 今日已完成任务 接下去要做 502 无 将数据库的数据转换 ...

  4. [Android]用图库打开指定的文件夹,没错是第一个画面直接是图库的文件夹画面

    参考了这个里面的代码 http://bbs.csdn.net/topics/380084274 一直报错 06-16 23:58:50.698 26148-26161/com.example.myap ...

  5. 【emWin】例程七:绘制基本图形

    简介:emWin 包含完整的2-D 图形库,可供大多数应用程序充分使用 本例程介绍如何使用图形API绘制基本的2-D图形 实验指导书及代码包下载: 链接:http://pan.baidu.com/s/ ...

  6. 在Windows下使用Git

    关于Git git是当今最流行的版本控制系统,因为是诞生在Linux操作系统下,因此Linux对git天生有最好的支持,但好在各路大牛的努力下,目前在Windows也能较为完美的使用.以下便是我使用g ...

  7. Thinking in Java——笔记(11)

    Holding Your Objects In general, your programs will always be creating new objects based on some cri ...

  8. SQL CREATE TABLE 语句\SQL 约束 (Constraints)\SQL NOT NULL 约束\SQL UNIQUE 约束

    CREATE TABLE 语句 CREATE TABLE 语句用于创建数据库中的表. SQL CREATE TABLE 语法 CREATE TABLE 表名称 ( 列名称1 数据类型, 列名称2 数据 ...

  9. cocoapods 升级到最新beta 版

    1 确保你的ruby源是https://rubygems.org/  国内的镜像不一定行 2 sudo gem install -n /usr/local/bin cocoapods 或者 sudo ...

  10. POI获取excel单元格红色字体,淡蓝色前景色的内容

    如果是Microsoft Excel 97-2003 工作表 (.xls) if(31 == cell.getCellStyle().getFillForegroundColor()) //判断单元格 ...