Android ps命令执行后的各项参数含义
直接输入ps后可以看到如下信息:
- # ps
- ps
- USER PID PPID VSIZE RSS WCHAN PC NAME
- root 1 0 276 188 c0099f1c 000086e8 S /init
- root 2 0 0 0 c004df64 00000000 S kthreadd
- root 3 2 0 0 c003fa28 00000000 S ksoftirqd/0
- root 4 2 0 0 c004abc0 00000000 S events/0
- root 5 2 0 0 c004abc0 00000000 S khelper
- root 6 2 0 0 c004abc0 00000000 S suspend
- root 7 2 0 0 c004abc0 00000000 S kblockd/0
- root 8 2 0 0 c004abc0 00000000 S cqueue
- root 9 2 0 0 c01780d0 00000000 S kseriod
- root 10 2 0 0 c004abc0 00000000 S kmmcd
- root 11 2 0 0 c006efa8 00000000 S pdflush
- root 12 2 0 0 c006efa8 00000000 S pdflush
- root 13 2 0 0 c0073480 00000000 S kswapd0
- root 14 2 0 0 c004abc0 00000000 S aio/0
- root 22 2 0 0 c0175900 00000000 S mtdblockdc
那么这些项各代表着什么意思呢?
- USER: 进程的当前用户;
- PID : 毫无疑问, process ID的缩写,也就进程号;
- PPID :process parent ID,父进程ID
- VSIZE : virtual size,进程虚拟地址空间大小;
- RSS : 进程正在使用的物理内存的大小;
- WCHAN :进程如果处于休眠状态的话,在内核中的地址;
- PC : program counter,
- NAME: process name,进程的名称
对比linux下的参数信息:
- root@long-desktop:~# ps aux
- USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
- root 1 0.0 0.2 2804 1684 ? Ss 21:11 0:01 /sbin/init
- root 2 0.0 0.0 0 0 ? S 21:11 0:00 [kthreadd]
- root 2286 0.0 0.4 8888 3172 ? Ss 21:52 0:00 sshd: root@pts/0
- root 2352 0.0 0.2 4684 2048 pts/0 Ss+ 21:52 0:00 -bash
- root 2454 0.4 0.4 8888 3164 ? Rs 22:06 0:00 sshd: root@pts/1
- root 2518 0.1 0.2 4684 2004 pts/1 Ss 22:06 0:00 -bash
- 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,其实现如下:
- int ps_main(int argc, char **argv)
- {
- DIR *d;
- struct dirent *de;
- char *namefilter = 0;
- int pidfilter = 0;
- int threads = 0;
- d = opendir("/proc");
- if(d == 0) return -1;
- while(argc > 1){
- if(!strcmp(argv[1],"-t")) {
- threads = 1;
- } else if(!strcmp(argv[1],"-x")) {
- display_flags |= SHOW_TIME;
- } else if(!strcmp(argv[1],"-p")) {
- display_flags |= SHOW_PRIO;
- } else if(isdigit(argv[1][0])){
- pidfilter = atoi(argv[1]);
- } else {
- namefilter = argv[1];
- }
- argc--;
- argv++;
- }
- printf("USER PID PPID VSIZE RSS %sWCHAN PC NAME\n",
- (display_flags&SHOW_PRIO)?"PRIO NICE RTPRI SCHED ":"");
- while((de = readdir(d)) != 0){
- if(isdigit(de->d_name[0])){
- int pid = atoi(de->d_name);
- if(!pidfilter || (pidfilter == pid)) {
- ps_line(pid, 0, namefilter);
- if(threads) ps_threads(pid, namefilter);
- }
- }
- }
- closedir(d);
- return 0;
- }
每一行数据是如何获得的:
- static int ps_line(int pid, int tid, char *namefilter)
- {
- char statline[1024];
- char cmdline[1024];
- char user[32];
- struct stat stats;
- int fd, r;
- char *ptr, *name, *state;
- int ppid, tty;
- unsigned wchan, rss, vss, eip;
- unsigned utime, stime;
- int prio, nice, rtprio, sched;
- struct passwd *pw;
- sprintf(statline, "/proc/%d", pid);
- stat(statline, &stats);
- if(tid) {
- sprintf(statline, "/proc/%d/task/%d/stat", pid, tid);
- cmdline[0] = 0;
- } else {
- sprintf(statline, "/proc/%d/stat", pid);
- sprintf(cmdline, "/proc/%d/cmdline", pid);
- fd = open(cmdline, O_RDONLY);
- if(fd == 0) {
- r = 0;
- } else {
- r = read(fd, cmdline, 1023);
- close(fd);
- if(r < 0) r = 0;
- }
- cmdline[r] = 0;
- }
- fd = open(statline, O_RDONLY);
- if(fd == 0) return -1;
- r = read(fd, statline, 1023);
- close(fd);
- if(r < 0) return -1;
- statline[r] = 0;
- ptr = statline;
- nexttok(&ptr); // skip pid
- ptr++; // skip "("
- name = ptr;
- ptr = strrchr(ptr, ')'); // Skip to *last* occurence of ')',
- *ptr++ = '\0'; // and null-terminate name.
- ptr++; // skip " "
- state = nexttok(&ptr);
- ppid = atoi(nexttok(&ptr));
- nexttok(&ptr); // pgrp
- nexttok(&ptr); // sid
- tty = atoi(nexttok(&ptr));
- nexttok(&ptr); // tpgid
- nexttok(&ptr); // flags
- nexttok(&ptr); // minflt
- nexttok(&ptr); // cminflt
- nexttok(&ptr); // majflt
- nexttok(&ptr); // cmajflt
- #if 1
- utime = atoi(nexttok(&ptr));
- stime = atoi(nexttok(&ptr));
- #else
- nexttok(&ptr); // utime
- nexttok(&ptr); // stime
- #endif
- nexttok(&ptr); // cutime
- nexttok(&ptr); // cstime
- prio = atoi(nexttok(&ptr));
- nice = atoi(nexttok(&ptr));
- nexttok(&ptr); // threads
- nexttok(&ptr); // itrealvalue
- nexttok(&ptr); // starttime
- vss = strtoul(nexttok(&ptr), 0, 10); // vsize
- rss = strtoul(nexttok(&ptr), 0, 10); // rss
- nexttok(&ptr); // rlim
- nexttok(&ptr); // startcode
- nexttok(&ptr); // endcode
- nexttok(&ptr); // startstack
- nexttok(&ptr); // kstkesp
- eip = strtoul(nexttok(&ptr), 0, 10); // kstkeip
- nexttok(&ptr); // signal
- nexttok(&ptr); // blocked
- nexttok(&ptr); // sigignore
- nexttok(&ptr); // sigcatch
- wchan = strtoul(nexttok(&ptr), 0, 10); // wchan
- nexttok(&ptr); // nswap
- nexttok(&ptr); // cnswap
- nexttok(&ptr); // exit signal
- nexttok(&ptr); // processor
- rtprio = atoi(nexttok(&ptr)); // rt_priority
- sched = atoi(nexttok(&ptr)); // scheduling policy
- tty = atoi(nexttok(&ptr));
- if(tid != 0) {
- ppid = pid;
- pid = tid;
- }
- pw = getpwuid(stats.st_uid);
- if(pw == 0) {
- sprintf(user,"%d",(int)stats.st_uid);
- } else {
- strcpy(user,pw->pw_name);
- }
- if(!namefilter || !strncmp(name, namefilter, strlen(namefilter))) {
- printf("%-8s %-5d %-5d %-5d %-5d", user, pid, ppid, vss / 1024, rss * 4);
- if(display_flags&SHOW_PRIO)
- printf(" %-5d %-5d %-5d %-5d", prio, nice, rtprio, sched);
- printf(" %08x %08x %s %s", wchan, eip, state, cmdline[0] ? cmdline : name);
- if(display_flags&SHOW_TIME)
- printf(" (u:%d, s:%d)", utime, stime);
- printf("\n");
- }
- return 0;
- }
Android ps命令执行后的各项参数含义的更多相关文章
- 【Linux】linux history命令执行后显示历史命令执行时间
vim ~/.bashrc 或者 ~/.bash_profile 或者 获取root权限修改vim /etc/profile 最后添加 export HISTTIMEFORMAT="%F ...
- 亲测有效的解决在vue cli@3 create 命令执行后 node-sass无法安装上的问题
在使用Vue cli@3 搭建工程手脚架的过程中.当我们选择了采用 sass 处理 css 编译.在使用vue create test 命令行执行到最后.会到以下这步:然后开始报错: Download ...
- bat 获取命令执行后的多个返回值,并取最后一个
最近在使用bat,遇到了这样的问题,获取adb shell cat命令之后的所有返回值,查了很长时间,才找到,现分享给大家. 举例如下: @for /f "tokens=*" %% ...
- linux 统计命令执行后的行数或者统计目录下文件数目
ls |wc 是统计你这个目录下的文件数目.ls |wc -l是输出第一个结果即31即文件的数目.
- linux top ps 命令
http://javawind.net/p131 VIRT:virtual memory usage 虚拟内存1.进程“需要的”虚拟内存大小,包括进程使用的库.代码.数据等2.假如进程申请100m的内 ...
- 【RAC】使用一条“ps”命令获取Linux环境下全部RAC集群进程信息
如何仅使用一条ps命令便能获取到所有与RAC集群进程相关的信息. 从所使用的命令角度上看很简单,仅需使用ps命令结合grep命令便能实现.问题关键是需要确定检索哪些关键字. 1.与RAC集群有关的进 ...
- PHP代码审计学习之命令执行漏洞挖掘及防御
[1]可能存在命令执行漏洞的函数: 00x1:常用的命令执行函数:exec.system.shell_exec.passthru 00x2:常用的函数处理函数:call_user_func.call_ ...
- php代码审计5审计命令执行漏洞
命令执行漏洞:通过易受攻击的应用程序在主机操作系统上执行任意命令,用户提供的数据(表单,cookie,http头等)未过滤 挖掘思路:用户能够控制函数输入,存在可执行代码的危险函数 命令执行和代码执行 ...
- Redis 命令执行过程(上)
今天我们来了解一下 Redis 命令执行的过程.在之前的文章中<当 Redis 发生高延迟时,到底发生了什么>我们曾简单的描述了一条命令的执行过程,本篇文章展示深入说明一下,加深读者对 R ...
随机推荐
- Mysql创建新用户方法
1. CREATE USER 语法: CREATE USER 'username'@'host' IDENTIFIED BY 'password'; 例子: CREATE USER 'dog'@'lo ...
- java分享第六天(冒泡排序)
冒泡排序 基本思想: 在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒.即:每当两相邻的数比较后发现它们 的排序与排序要求 ...
- UI--UIPickerView和UIDatePicker的总结
回到顶部 UIPickerView的主要方法和城市选择器的修正 UIPickerView只有两个数据源方法.要想完整地显示出PickerView,需要结合使用代理方法 数据源方法: // 一共有多少组 ...
- HDU2527 哈夫曼编码
Safe Or Unsafe Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- synchronized的实现原理和应用
在多线程并发编程中synchronized是元老级的角色,人多称重量级锁. synchronized实现同步的基础:Java中的每一个对象都可以作为锁.具体表现有如下3种: 1.对于普通同步方法,锁时 ...
- SQLite的原子提交原理
本文描述了sqlite为保证数据库文件不被损坏而采取的种种手段.. 以下是原译者的摘要:http://www.kuqin.com/shuoit/20150618/346693.html 摘要: 本文源 ...
- php开发常见问题
ajax 方面: ajax写法: //简写版ajax$.get('url.php',{'name':'myname','age':'18'},function(data){},'json'); ...
- 20145215实验二 Java面向对象程序设计
一.实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 二.实验步骤 (一)单元测试 (1)三种代码 伪代码: ...
- js 打印
关于js打印很简单的一段代码 function doPrint() { var newWindow = window.open("打印窗口", "_blank" ...
- mysql中影响myisam引擎写入性能的三项设置
一.LOW_PRIORITY1.对于myisam默认是写操作优先,读操作滞后.通过该项更改,可以使读操作优先,写操作在有空闲的时候再写入.但该项可能在理论上造成,写被永远阻塞. SQL语句中使用示例: ...