美文网首页
史上最全ps 命令解析

史上最全ps 命令解析

作者: oasis_m | 来源:发表于2020-03-14 09:54 被阅读0次

声明:所有文章只作为学习笔记用,转载非原创
ps
https://juejin.im/post/5d75b6d5e51d453b5c121938

进程状态

https://www.cnblogs.com/diegodu/p/9167671.html
Linux进程状态:D (TASK_UNINTERRUPTIBLE),不可中断的睡眠状态。
与TASK_INTERRUPTIBLE状态类似,进程处于睡眠状态,但是此刻进程是不可中断的。不可中断,指的并不是CPU不响应外部硬件的中断,而是指进程不响应异步信号。
在进程对某些硬件进行操作时(比如进程调用read系统调用对某个设备文件进行读操作,而read系统调用最终执行到对应设备驱动的代码,并与对应的物理设备进行交互),可能需要使用TASK_UNINTERRUPTIBLE状态对进程进行保护,以避免进程与设备交互的过程被打断,造成设备陷入不可控的状态。这种情况下的TASK_UNINTERRUPTIBLE状态总是非常短暂的,通过ps命令基本上不可能捕捉到。

ps 与进程
https://zhuanlan.zhihu.com/p/93975327
top -H -p <pid> 或 按H
ps -T -p <pid>
Htop
https://www.cnblogs.com/EasonJim/p/8098217.html

进程占用内存

在讲解ps命令的参数之前,有必要先介绍一下Linux对进程占用内存的计算依据。因为Linux中的进程是使用虚拟地址的,这些进程通过malloc()或者mmap()向内存申请内存之后(这部分内存大小称为VSS - Virtual Set Size),内核并不会立刻为其分配实际的物理内存。等到进程真正使用到内存时(比如调用了memset()函数),内核才会为这个进程分配物理内存,并建立虚拟地址和物理地址之间的映射(参考这篇文章)。

SYSV 风格选项 - A 到 - Z 和 - a 到 - z 共 52 个,BSD 风格选项 A 到 Z 和 a 到 z 共 52 个。于是 ps 命令就有一共 104 个命令选项可能性。

ps.jpg
在这 104 个命令选项中,未启用的或曾经使用过现在废弃的命令选项有如下 40 个,分别是 A、B、C、D、E、F、G、I、J、K、P、Q、R、W、Y、b、d、i、y、z、-B、-D、-E、-I、-J、-K、-Q、-R、-S、-W、-X、-Y、-b、-h、-i、-k、-r、-v、-x 和 - z。

输出是不同的
 [root@node1 ~]# ps aux  | wc -l
125
[root@node1 ~]# ps | wc -l
4
[root@node1 ~]# 

常用

Linux ps 命令显示所有进程信息的选项只有 2 个,即 SYSV 风格的 - e 和 - A。相比之下,-e 更容易记忆和书写,请大家牢记这个 - e 选项。
大家知道,ps 命令的所有信息都是 linux kernel 生成,并通过 / proc / 目录输出给用户空间的。在 / proc / 目录下,每一个以数字开头的目录,就对应一个进程信息。既然如此,通过如下命令便可一目了然。


ps -e | wc -l && ps -A | wc -l&& ls /proc/ | grep '^[1-9]' | wc -l
证明  参数 - e 和 - A 显示的进程记录数确实和 proc 目录下的所有进程目录数一致。

#树形排序( 进程之间的关系)
 f 和 - H 就是实现这个树形排序功能的 2 个选项。

#排序
选项 k 可以让我们以某个字段为条件对输出结果进行排序,并且还可以使用 +- 符号设置升序排序还是降序排序
ps -e u k rss
ps -e u k -rss
ps -e k ppid,rss -o pid,ppid,rss,ucmd 
先按 ppid 进行升序排序,ppid 值相同时,再按 rss 值进行升序排序。



#进程数
ps -eL h| wc -l

#线程信息
ls /proc/6270/task/
Linux ps 同样提供了一组选项可以将每个进程的线程信息详细展现,这组选项包括 H、-L、-T、M、m 和 - m。在讲解这些选项之前,我们先看一个小测试。
ps -C mysqld -L #查看mysql 线程
第一行 PID 等于 LWP(线程 ID)的值,说明是线程组的主线程(即进程)。其余三个线程 ID 各不相同,但 PID 值都和主线程的 PID 值一样,说明是同一线程组的普通线程。
ps -C mysqld -m O lwp #同样和上一个命令


#ps 一共有多少显示项目
ps L | wc -l

Linux ps 命令的 aux 选项组合输出 PID、%CPU、%MEM、RSS、TIME 等数据项,ps 命令的 - el 选项组合输出 PID、PPID、WCHAN、TIME、CMD 等数据项。首先一个问题就是,ps 命令一共有多少数据项可以输出。这个问题很好回答,通过 L 选项很容易获取,一共有 168 个数据输出项。

 其次的一个问题就是,是什么决定了 ps aux 命令输出结果中恰恰包含 USER、PID、%CPU、%MEM、VSZ、RSS、TTY、STAT、START、TIME 和 COMMAND 这 11 个数据项呢。原因是 ps 命令中有一些选项用来对数据字段进行固定组合的作用。其中 aux 中的 u 选项就固定包含了以上 11 个数据输出项,并且他们的显示顺序也已经固化在代码中。

 参数为
 BSD 风格时,默认都会显示 PID、TTY、STAT、TIME 和 COMMAND 这 5 个字段。
参数为 SYSV 风格时,默认都会显示 PID、TTY、TIME 和 CMD 这 4 个字段。
ps 命令无参数时默认为 SYSV 风格。

ps -o %p,%P,%n,%a,%x,%t
  PID, PPID, NI,COMMAND                    ,    TIME,    ELAPSED
  456,  454,  0,-bash                      ,00:00:01,   06:20:28
22945,  456,  0,ps -o %p,%P,%n,%a,%x,%t    ,00:00:00,      00:00
[root@node1 ~]# ps -o "%p|%P|%n|%a|%x|%t"
  PID| PPID| NI|COMMAND                    |    TIME|    ELAPSED
  456|  454|  0|-bash                      |00:00:01|   06:21:14
22990|  456|  0|ps -o %p|%P|%n|%a|%x|%t    |00:00:00|      00:00


使用 w 或 - w 选项,就会将完整的进程命令信息显示,多出的部分换行显示。有的时候为了效果好一点,建议我们可以多使用几次 w 选项,比如 ww、www 或 wwww。

选项 u 的 COMMAND 字段,默认会输出进程路径和执行参数信息。从上面的例子可以看出,选项 c 可以使选项 u 的 COMMAND 字段更加精简,只保留进程名称。选项 e 可以使选项 u 的 COMMAND 字段更加丰富,增加进程环境变量的相关内容。

 [root@node1 ~]#  ps u c
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root       456  0.0  0.2 116456  3136 pts/0    Ss   10:45   0:01 bash
root      2163  0.0  0.2 116232  2604 pts/1    Ss+  11:13   0:00 bash
root      6079  0.0  0.0 110104   796 tty1     Ss+  3月21   0:00 agetty
root     23201  0.0  0.1 155360  1824 pts/0    R+   17:10   0:00 ps
[root@node1 ~]# ps u e ww
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root       456  0.0  0.2 116456  3136 pts/0    Ss   10:45   0:01 -bash USER=root LOGNAME=root HOME=/root PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin MAIL=/var/mail/root SHELL=/bin/bash SSH_CLIENT=192.168.174.1 1969 22 SSH_CONNECTION=192.168.174.1 1969 192.168.174.202 22 SSH_TTY=/dev/pts/0 TERM=vt100 XDG_SESSION_ID=149 XDG_RUNTIME_DIR=/run/user/0
root      2163  0.0  0.2 116232  2604 pts/1    Ss+  11:13   0:00 -bash USER=root LOGNAME=root HOME=/root PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin MAIL=/var/mail/root SHELL=/bin/bash SSH_CLIENT=192.168.174.1 1969 22 SSH_CONNECTION=192.168.174.1 1969 192.168.174.202 22 SSH_TTY=/dev/pts/1 TERM=vt100 XDG_SESSION_ID=149 XDG_RUNTIME_DIR=/run/user/0
root      6079  0.0  0.0 110104   796 tty1     Ss+  3月21   0:00 /sbin/agetty --noclear tty1 linux LANG= PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin TERM=linux LANGUAGE= LC_CTYPE= LC_NUMERIC= LC_TIME= LC_COLLATE= LC_MONETARY= LC_MESSAGES= LC_PAPER= LC_NAME= LC_ADDRESS= LC_TELEPHONE= LC_MEASUREMENT= LC_IDENTIFICATION=
root     23209  0.0  0.1 155360  1832 pts/0    R+   17:10   0:00 ps u e ww XDG_SESSION_ID=149 HOSTNAME=node1 TERM=vt100 SHELL=/bin/bash HISTSIZE=1000 SSH_CLIENT=192.168.174.1 1969 22 SSH_TTY=/dev/pts/0 USER=root etcd=/usr/local/kubernetes/bin LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36: MAIL=/var/spool/mail/root PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/local/kubernetes/bin:/root/bin PWD=/root LANG=zh_CN.UTF-8 HISTCONTROL=ignoredups SHLVL=1 HOME=/root LOGNAME=root XDG_DATA_DIRS=/root/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share SSH_CONNECTION=192.168.174.1 1969 192.168.174.202 22 LESSOPEN=||/usr/bin/lesspipe.sh %s XDG_RUNTIME_DIR=/run/user/0 _=/usr/bin/ps

相关文章

网友评论

      本文标题:史上最全ps 命令解析

      本文链接:https://www.haomeiwen.com/subject/umkmshtx.html